2017-03-20 64 views
4

在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) 

但感覺這不是做正確的事。

回答

10

當您需要類型參數時,您應該定義一個參數方法。這是訪問類型參數的唯一正確方法。

所以對於一個Point

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

類型是保存在類信息:

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

這比寫一個特定的功能,它更普遍的,但我不確定它被認爲是官方的。

+0

謝謝,是的,我已經看過'DataType'的'parameters'字段,但它感覺有點難看,這就是爲什麼aviks的解決方案似乎最好(更具表現力)。這就是說你引用的解決方案做得很好,所以+1 – tibL

0

還有fieldtype

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

不知道如何這比任何剛開實例的類型,雖然更好。