Julia - 类型的替代字段名

时间:2016-11-01 12:54:34

标签: julia

如果我有一个名为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

1 个答案:

答案 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]

的工作。这很简单吗?以同样的方式,可以添加更多别名。可能涉及一些较小的运行时成本,因此热循环应使用基于.的访问。