Function 在类型内部存储函数

Function 在类型内部存储函数,function,types,julia,Function,Types,Julia,通常,人们希望严格定义它们的类型,同时对方法保留松散的类型限制(因为后者会自动专门化,因此不会获得性能增益)。因此我知道,对于定义函数,使用::Base.Callable是一种很好的做法。但是,当在类型中存储函数时会发生什么情况 在v0.5中,Function和Base.Callable都是抽象类型,因此 type TestType f::Base.Callable # or ::Function end 不会严格打印。可以使用 type TestType{T<:Base.Calla

通常,人们希望严格定义它们的类型,同时对方法保留松散的类型限制(因为后者会自动专门化,因此不会获得性能增益)。因此我知道,对于定义函数,使用
::Base.Callable
是一种很好的做法。但是,当在类型中存储函数时会发生什么情况

在v0.5中,
Function
Base.Callable
都是抽象类型,因此

type TestType
  f::Base.Callable # or ::Function
end
不会严格打印。可以使用

type TestType{T<:Base.Callable}
  f::T
end

type TestType{T我个人在犹豫时,我更喜欢参数化版本,因为它更通用。如果您有参数化类型,则执行
TestType{Any}
TestType{Function}
非常简单,并且这些类型的行为与未参数化的
TestType
完全相同


例如,
Base
Vector{T}
,它既可以用于
Vector{Any}
这样的特定情况,也可以用于
Vector{Int}
这样的特殊情况,同样,您可以有
TestType{T}
,这对
TestType{Any}
TestType{typeof(sin)都有用

我个人会更进一步,推荐
Any
而不是
Base.Callable
,以捕捉像
多项式
这样的情况。是的,这些是折衷。不确定是否还有其他答案。