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

时间:2017-03-20 11:51:47

标签: types julia

在Julia(< 0.6)中,在创建参数复合类型(例如MyType{T})时,是否有一种从该类型的实例中恢复T的简洁方法?

从文档中获取他们的示例:

type Point{T}
    x::T
    y::T
end

我可以创建一个对象p = Point(5.0,5.0)T此处将与Float64匹配,以便相应的对象为Point{Float64}。有没有一种干净的方法可以在这里恢复Float64

我能做到

typeof(p.x)

但感觉这不是正确的事情。

3 个答案:

答案 0 :(得分:10)

当您需要type参数时,您应该定义参数方法。这是访问type参数的唯一正确方法。

对于Point

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

答案 1 :(得分:1)

类型保存在班级信息中:

typeof(Point(1, 2)).parameters # -> svec(Int64)

比为其编写特定功能更为通用,但我不确定它是否为官方功能。

答案 2 :(得分:0)

还有fieldtype

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

不确定如何获得实例的类型更好。