줄리아에서 구조체 속성 확인하는 법
코드
propertynames()
propertynames()
함수로 확인하면 된다1. 줄리아에는 클래스가 없고 구조체만 있으니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()
다음은 조금 어려운 이야기인데, 딱히 몰라도 줄리아 프로그래밍엔 아무 지장 없다.
propertynames(x)
는 근본적으로 fieldnames(typeof(x))
와 같다고 한다3. 실전적으로 사용하는 함수로써는 큰 의미 없지만, 이를 통해 알 수 있는 사실은 줄리아에서 구조체structure의 인스턴스instance를 오브젝트object라 부르며 구조체 그 자체가 가지는 속성attribute은 필드field고 그것의 인스턴스로써 실재하는 오브젝트의 속성은 프로퍼티property라 부르는 것이다.
환경
- OS: Windows
- julia: v1.6.0