Julia 参数型内构造函数

Julia 参数型内构造函数,julia,Julia,我对参数类型的内部构造函数中的类型注释有点困惑 以下4种方法在JIT推理效率和运行时效率方面有什么不同吗 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) e

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

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

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

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

工作,根据杰夫的回答:

问题1:如果类型的名称是X,并且构造函数具有 形成函数X{…}(…),然后右大括号中的内容 在X被传递给new之后

问题2:要创建实例,类型参数必须具有明确的 值,所以new(…)总是等价于一些新的{…}(…)。他们 将降低到完全相同的水平

它们是完全一样的。最后一个示例是规范模式:

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

我使用上述4种方法声明了
MyType

immutable MyType1{T}
    x::T
    MyType1{T}(x::T) = new{T}(x + x)
end
immutable MyType2{T}
    x::T
    MyType2(x::T) = new{T}(x + x)
end
immutable MyType3{T}
    x::T
    MyType3{T}(x::T) = new(x + x)
end
immutable MyType4{T}
    x::T
    MyType4(x::T) = new(x + x)
end
然后打印他们的LLVM字节码:
code\u LLVM(MyType1{Int},Int)
并比较输出,它们完全相同,因此我认为四种方法之间没有区别。