2015-11-06 163 views

回答

1

這可以使用下面的語法來完成:

(::Type{MyType{T}}){T}() = MyType{T}(T[]) 

在第一組括號的事情描述了所謂的對象。 ::T表示「T型」,因此這是調用Type{MyType{T}}類型對象的定義,表示對象MyType{T}本身。接下來{T}意味着T是該定義的參數,並且爲了調用此定義,其值必須可用。所以MyType{Int}匹配,但MyType沒有。從那裏開始,語法應該很熟悉。

這個語法肯定有點不合時宜,我們希望在未來的語言版本中改進它,希望v0.6。

+0

我應該補充一點,該語法僅適用於v0.5。 –

0

我可能是錯的,但如果你不能建立這樣的參數的函數:

julia> f{T}() = show(T) 
WARNING: static parameter T does not occur in signature for f at none:1. 
The method will not be callable. 
f (generic function with 1 method) 

因此,你將無法做到這一點:

julia> immutable MyType{T} 
      x::Vector{T} 
     end 

julia> MyType{T}() = MyType{T}(T[]) 
WARNING: static parameter T does not occur in signature for call at none:1. 
The method will not be callable. 
MyType{T} 

julia> x = MyType{Int}() 
ERROR: MethodError: `convert` has no method matching convert(::Type{MyType{Int64}}) 
... 

每個外部構造也是功能。

0

你可以說

f(T::Type) = show(T) 

MyType(T::Type) = MyType(T[]) 

但朱莉婭需要看到的類型在調用知道你想要的。

+0

是的,但它不被認爲是MyType的外部構造函數{T} –