如果我有一个名为Measurements的类型
type Measurements
x
y
z
end
其中x表示宽度,y高度和z深度
然而,在某些情况下,在其他类型的情况下,可能不是那么清楚。有没有办法让它可以调用两个
julia> m = Measurements(10,5,12);
julia> m.x
10
julia> m.width
10
f.x喜欢这样
julia> Base.getfield(m::Measurement, width) = m.x
返回错误
ERROR: cannot add methods to a builtin function
答案 0 :(得分:1)
评论提出了一些方法来获得更好的字段访问,@ DNF建议使用访问器函数(setter / getters)是一种很好的封装模式。 Julia语言允许的另一个选择是定义:
Base.getindex(v::Measurements,s::Symbol) = s==:width ? v.x : s==:height ? v.y : s==:depth ? v.z : throw(BoundsError(s))
然后,
m[:width], m[:height], m[:depth]
的工作。这很简单吗?以同样的方式,可以添加更多别名。可能涉及一些较小的运行时成本,因此热循环应使用基于.
的访问。