複合型のJuliaオブジェクトが与えられた場合、そのフィールドをどのように決定できますか?
REPLで作業している場合、私は1つの解決策を知っています。まず、typeof
への呼び出しを介してオブジェクトのタイプを把握し、次にヘルプモード(?
)、次にタイプを検索します。同じことを達成するためのよりプログラム的な方法はありますか?
v0.7以降の場合
fieldnames(x)
を使用します。ここで、x
はDataType
です。たとえば、fieldnames(Date)
、代わりにfieldnames(today())
、またはfieldnames(typeof(today()))
を使用します。
これは、フィールド名を順番にリストした_Vector{Symbol}
_を返します。
フィールド名がmyfield
の場合、そのフィールドの値を取得するには、getfield(x, :myfield)
またはショートカット構文_x.myfield
_を使用します。
dump(x)
は、関連する便利な関数です。
v0.7より前
fieldnames(x)
を使用します。ここで、x
は対象となる複合タイプのインスタンス、またはDataType
のいずれかです。つまり、fieldnames(today())
とfieldnames(Date)
は等しく有効で、同じ出力を持ちます。
オブジェクトが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
_はフィールドのタイプの対応するベクトルを返します。