2017-01-17 104 views
3

給定一個Julia對象的複合類型,如何確定其字段?如何獲取Julia對象的字段

我知道一個解決方案,如果你在REPL中工作:首先你通過調用typeof找出對象的類型,然後進入幫助模式(?),然後查找類型。是否有一種更具編程意義的方式來實現同樣的目標?

+0

我使用的是一種黑客行爲:在REPL中,對於對象'x',鍵入'x.'(即'x'後面跟着一個點'.'),然後打一次或兩次TAB。要求Julia自動完成命令。然後Julia會告訴你'x'的字段,假設它有任何字段。 –

回答

7

使用fieldnames(x),其中x是您感興趣的複合類型的實例,或者DataType。也就是說,fieldnames(today())fieldnames(Date)將具有相同的輸出。這將返回Vector{Symbol}按順序列出字段名稱。

要檢索任何這些字段中的值,請使用getfield(x, field_name_here)或快捷鍵語法x.field_name_here

另一個有用的相關功能是玩dump(x)

我敢肯定,我已經看到另一個在StackOverflow上相當接近的重複問題,但是快速搜索沒有任何結果。如果有人知道,請在評論中鏈接。

+0

請注意,答案也出現在[Julia文檔](http://docs.julialang.org/en/release-0.4/manual/types/#composite-types)中。 –

1

假設對象是obj

你可以得到它的領域的所有信息與下面的代碼片段:

T = typeof(obj) 
for (name, typ) in zip(fieldnames(T), T.types) 
    println("type of the fieldname $name is $typ") 
end 

這裏,fieldnames(T)返回字段名的向量和T.types返回相應的矢量類型的字段。

相關問題