logo

ジュリアで関数として構造体のプロパティを参照する方法 📂ジュリア

ジュリアで関数として構造体のプロパティを参照する方法

概要

Julia構造体のプロパティを参照する方法は主に二つある。文法的な便宜または実際の用途に応じて適切に使用するべきだ。

コード

例として、Juliaで//演算子は以下のように有理数(Rational)タイプの数を作る。有理数が持つプロパティの名前には、分子numeratorを意味する:numと分母denominatorを意味する:denがある。

julia> q = 7 // 12
7//12

julia> q |> typeof
Rational{Int64}

julia> q |> propertynames
(:num, :den)

getproperty(x, :y)x.y

julia> getproperty(q, :den)
12

julia> q.den
12

基本的には、getproperty()関数の二番目の引数にそのプロパティの名前をシンボルで与えればいい。あるいは、普通のプログラミング言語でのフィールド、プロパティへの参照のように、オブジェクト変数名の後ろに点を付けてそのプロパティにアクセスできる。

配列に対するプロパティの参照

一方、上記の方法は一回だけ必要な時に使用できる方法だが、配列にある複数の要素にアクセスする必要があれば、以下のようにブロードキャストを使用しなければならない。あるいは、性能が重要でなくてただ早くコーディングが必要なら、Pythonみたいにリストコンプリヘンションを使用することも一つの方法だ。

julia> Q = [k // 12 for k in 1:12]
12-element Vector{Rational{Int64}}:
  1//12
  1//6
  1//4
  1//3
  5//12
  1//2
  7//12
  2//3
  3//4
  5//6
 11//12
  1//1

julia> getproperty.(Q, :num)
12-element Vector{Int64}:
  1
  1
  1
  1
  5
  1
  7
  2
  3
  5
 11
  1

julia> [q.num for q in Q]
12-element Vector{Int64}:
  1
  1
  1
  1
  5
  1
  7
  2
  3
  5
 11
  1

全コード

q = 7 // 12
q |> typeof
q |> propertynames

getproperty(q, :den)
q.den

Q = [k // 12 for k in 1:12]
getproperty.(Q, :num)
[q.num for q in Q]

環境

  • OS: Windows
  • julia: v1.9.0