ジュリアで構造体の属性を確認する方法
コード
propertynames()
propertynames()
関数で確認するといい1。Juliaにはクラスがなく、構造体だけが存在するから2、この関数で返されるすべてのシンボルは、正確にプロパティだけの名前ということになる。
次はGraphs
パッケージでエルデシュ-レニィネットワークを生成し、ノードの数と各ノードのネイバーフッドを確認するコードである。このネットワークにpropertynames()
関数を適用し、:ne
とfadjlist
というプロパティがシンボルとして返された。
julia> using Graphs
julia> G_nm = erdos_renyi(50,200)
{50, 200} undirected simple Int64 graph
julia> propertynames(G_nm)
(:ne, :fadjlist)
julia> G_nm.ne
200
julia> G_nm.fadjlist
50-element Vector{Vector{Int64}}:
[3, 4, 11, 25, 26, 27, 33, 40, 44, 48]
[11, 17, 20, 23, 24, 38, 45, 50]
[1, 4, 15, 24, 29, 30, 34, 42, 46]
[1, 3, 18, 24, 30, 32, 43, 45]
[6, 7, 8, 24, 26, 29, 37, 39, 50]
⋮
[3, 13, 17, 28, 29, 32, 39, 44, 47, 49]
[10, 14, 18, 26, 32, 36, 41, 44, 46]
[1, 21, 23, 24, 25, 32, 41, 44, 45]
[9, 13, 14, 17, 21, 31, 43, 46, 50]
[2, 5, 13, 28, 31, 32, 35, 42, 44, 49]
fieldnames()
次は少し難しい話だけど、具体的に知らなくてもJuliaのプログラミングには何の問題もない。
propertynames(x)
は根本的にfieldnames(typeof(x))
と同じだと言われている3。実際に使う関数としては大きな意味はないが、これを通じて分かる事実は、Juliaでは構造体structureのインスタンスinstanceをオブジェクトobjectと呼び、構造体そのものが持っている属性attributeはフィールドfield、そしてそのインスタンスとして実際に存在するオブジェクトの属性はプロパティpropertyと呼ばれることである。
環境
- OS: Windows
- julia: v1.6.0