Julia 的物件都有屬性,但這需要寫在型別中事先定義。但如果要為沒有任何屬性的型別增加屬性要怎麼做?

Julia 的屬性存取是來自 Base.getpropertyBase.setproperty! 兩個方法。

如果我們這樣定義。

1
2
3
julia> struct Foo end

julia> Base.getproperty(::Foo, x::Symbol) = "$x"

來測試不同的 property。

1
2
3
4
5
6
7
8
julia> foo = Foo()
Foo()

julia> foo.a
"a"

julia> foo.x
"x"

以及設定的部份。

1
2
3
4
5
6
7
julia> Base.setproperty!(::Foo, x::Symbol, v) = nothing

julia> foo.a = 1
1

julia> foo.b = 1
1

不過要注意的是,如果對本身就有屬性的型別增加 Base.getpropertyBase.setproperty! 兩個方法,會去更動到原先的屬性存取行為喔!這邊要注意一下。