簡體   English   中英

在類型中存儲函數

[英]Storing Functions inside of Types

通常人們想要定義他們的類型嚴格,同時對方法留下寬松的類型限制(因為后者將自動專門化,因此沒有性能增益)。 因此我知道,對於定義函數,使用::Base.Callable是一種很好的做法。 但是,在類型中存儲函數時呢?

在v0.5中, FunctionBase.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

例如, BaseVector{T} ,可用於Vector{Any}等特定情況和Vector{Int}等特殊情況,類似的情況下,你可以使用TestType{T} ,它對兩個TestType{Any}都有TestType{Any}TestType{typeof(sin)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM