请问把函数参数定义为抽象类或是Union会不会有什么不同


#1

我想定义一个抽象类foo:abstract type foo end
另外派生两个子类foo1,foo2
倘若我这样定义函数:

function foofn(obj::foo)
end

或是这样:

funtion foofn(obj::Union{foo1,foo2})
end

请问这两种方法的执行效率会是一样吗??


#2

一般认为具体类型会比抽象类型快,确定的类型比不确定的类型快,但这个得结合具体的代码来看,比如你写个空实现的话编译器会优化掉。可以结合@code_warntype来看。


#3

一样,你可以试一下。
Julia会根据函数参数不同的具体类型重新编译一下函数。
具体你的foofn,当你运行foo1时函数编译一次,如果你运行foo2时,函数又得编译一次。