Julia 参数型内构造函数
我对参数类型的内部构造函数中的类型注释有点困惑 以下4种方法在JIT推理效率和运行时效率方面有什么不同吗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
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)
并比较输出,它们完全相同,因此我认为四种方法之间没有区别。