为了实例化类似的类型 x = MyType{Int}()
我可以定义一个内部构造函数.
immutable MyType{T}
x::Vector{T}
MyType() = new(T[])
end
Run Code Online (Sandbox Code Playgroud)
是否可以使用外部构造函数实现相同的目标?
这可以使用以下语法来完成:
(::Type{MyType{T}}){T}() = MyType{T}(T[])
Run Code Online (Sandbox Code Playgroud)
第一组括号中的内容描述了被调用的对象。::T表示“T 类型”,因此这是调用 类型对象的定义Type{MyType{T}},即对象MyType{T}本身。Next{T}意味着它T是此定义的参数,并且它的值必须可用才能调用此定义。所以MyType{Int}匹配,但MyType不匹配。从这里开始,语法应该很熟悉了。
这种语法肯定有点繁琐和不直观,我们希望在该语言的未来版本(希望是 v0.6)中改进它。