給定一個Julia對象的複合類型,如何確定其字段?如何獲取Julia對象的字段
我知道一個解決方案,如果你在REPL中工作:首先你通過調用typeof
找出對象的類型,然後進入幫助模式(?
),然後查找類型。是否有一種更具編程意義的方式來實現同樣的目標?
給定一個Julia對象的複合類型,如何確定其字段?如何獲取Julia對象的字段
我知道一個解決方案,如果你在REPL中工作:首先你通過調用typeof
找出對象的類型,然後進入幫助模式(?
),然後查找類型。是否有一種更具編程意義的方式來實現同樣的目標?
使用fieldnames(x)
,其中x
是您感興趣的複合類型的實例,或者DataType
。也就是說,fieldnames(today())
和fieldnames(Date)
將具有相同的輸出。這將返回Vector{Symbol}
按順序列出字段名稱。
要檢索任何這些字段中的值,請使用getfield(x, field_name_here)
或快捷鍵語法x.field_name_here
。
另一個有用的相關功能是玩dump(x)
。
我敢肯定,我已經看到另一個在StackOverflow上相當接近的重複問題,但是快速搜索沒有任何結果。如果有人知道,請在評論中鏈接。
請注意,答案也出現在[Julia文檔](http://docs.julialang.org/en/release-0.4/manual/types/#composite-types)中。 –
假設對象是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
返回相應的矢量類型的字段。
我使用的是一種黑客行爲:在REPL中,對於對象'x',鍵入'x.'(即'x'後面跟着一個點'.'),然後打一次或兩次TAB。要求Julia自動完成命令。然後Julia會告訴你'x'的字段,假設它有任何字段。 –