web-dev-qa-db-ja.com

Juliaオブジェクトのフィールドを取得する方法

複合型のJuliaオブジェクトが与えられた場合、そのフィールドをどのように決定できますか?

REPLで作業している場合、私は1つの解決策を知っています。まず、typeofへの呼び出しを介してオブジェクトのタイプを把握し、次にヘルプモード(?)、次にタイプを検索します。同じことを達成するためのよりプログラム的な方法はありますか?

16
Yly

v0.7以降の場合

fieldnames(x)を使用します。ここで、xDataTypeです。たとえば、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)は等しく有効で、同じ出力を持ちます。

24
Colin T Bowers

オブジェクトが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_はフィールドのタイプの対応するベクトルを返します。

3
novatena