Types 参数化复合类型中的恢复类型

Types 参数化复合类型中的恢复类型,types,julia,Types,Julia,在Julia(svec(Int64) 它比为它编写特定函数更通用,但我不确定它是否被视为正式函数。还有fieldtype fieldtype(typeof(Point(1.0, 1.0)), :x) # --> Float64 fieldtype(Point, :x) # --> T fieldtype(Point{Int64}, :x) # --> Int64 不知道这比只获取实例的类型有什么好处。谢谢,是的,我看到了数据类型的参数字段,但是感觉有点难看,这就是为什么av

在Julia(<0.6)中,当创建参数化复合类型(如
MyType{T}
)时,是否有一种干净的方法可以从该类型的实例恢复
T

以他们的文档为例:

type Point{T}
    x::T
    y::T
end
我可以创建一个对象
p=Point(5.0,5.0)
,这里的
T
将与
Float64
匹配,这样相应的对象就是
点{Float64}
。这里有没有一种干净的方法来恢复
Float64

我可以

typeof(p.x)

但是感觉这样做不对。

当需要类型参数时,应该定义一个参数化方法。这是访问类型参数的唯一正确方法

所以对于一个

function doSomething{T}(p::Point{T}) 
    // You have recovered T  
    println(T)
end

类型保存在类信息中:


类型(点(1,2))。参数#->svec(Int64)


它比为它编写特定函数更通用,但我不确定它是否被视为正式函数。

还有
fieldtype

fieldtype(typeof(Point(1.0, 1.0)), :x) # --> Float64
fieldtype(Point, :x) # --> T
fieldtype(Point{Int64}, :x) # --> Int64

不知道这比只获取实例的类型有什么好处。

谢谢,是的,我看到了
数据类型的
参数
字段,但是感觉有点难看,这就是为什么aviks的解决方案看起来最好(更具表现力)。也就是说,您引用的解决方案很好,所以+1