参数类型的内部构造函数

col*_*ang 6 julia

我对参数类型的内部构造函数中的类型注释感到有点困惑.

在JIT推理效率和运行时效率方面,以下4种方法有什么不同吗?

immutable MyType{T}
    x::T
    MyType{T}(x::T) = new{T}(x + x)
end

immutable MyType{T}
    x::T
    MyType(x::T) = new{T}(x + x)
end

immutable MyType{T}
    x::T
    MyType(x::T) = new(x + x)
end

immutable MyType{T}
    x::T
    MyType{T}(x::T) = new(x + x)
end
Run Code Online (Sandbox Code Playgroud)

他们都为之努力 x = MyType{Int}(1)

Gni*_*muc 2

根据杰夫在这里的回答:

问题 1:如果类型名称为 X,并且构造函数的形式为 function X{...}(...),则 X 后面的花括号中的内容将传递给 new。

问题2:为了创建一个实例,类型参数必须有确定的值,因此new(...)总是等价于一些new{...}(...)。他们会降低到完全相同的程度。

它们是完全相同的。你的最后一个例子是一个规范模式:

struct MyType{T}
    x::T
    MyType{T}(x::T) = new(x + x)
end
Run Code Online (Sandbox Code Playgroud)