[英]Storing Functions inside of Types
通常人們想要定義他們的類型嚴格,同時對方法留下寬松的類型限制(因為后者將自動專門化,因此沒有性能增益)。 因此我知道,對於定義函數,使用::Base.Callable
是一種很好的做法。 但是,在類型中存儲函數時呢?
在v0.5中, Function
和Base.Callable
都是抽象類型,因此類型
type TestType
f::Base.Callable # or ::Function
end
不會嚴格打字。 人們可以通過使用嚴格鍵入
type TestType{T<:Base.Callable}
f::T
end
然后,它將為每個功能產生不同的類型。
不同方法有哪些好處和缺點? 看起來第二種方法會導致任何g(t::TestType)
為每個輸入函數重新編譯,而第一種方法不會嚴格鍵入f
。 如果你想內聯函數(並且這些類型“非常不變”),那么第二個會更好嗎?如果你要更改函數,第一個會更好嗎? 或者我是否過度思考這個?
就我個人而言,我更喜歡參數化版本,因為它更通用。 如果您有參數化類型,那么執行TestType{Any}
或TestType{Function}
很簡單,並且這些類型的行為與未參數化的TestType TestType
。
例如, Base
有Vector{T}
,可用於Vector{Any}
等特定情況和Vector{Int}
等特殊情況,類似的情況下,你可以使用TestType{T}
,它對兩個TestType{Any}
都有TestType{Any}
或TestType{typeof(sin)}
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.