在具有一些实例变量的 Crystal 类中:
class Coordinate
def initialize(x : Int32, y : Int32)
@x = x
@y = y
end
end
为了访问所述变量,您需要编写如下方法:
...
def x
@x
end
在本例中这很好,但如果您需要访问大量变量,则可能会非常乏味且耗时。有没有一种方法可以通用地访问类的任何变量?
我确实想过尝试找到与 ruby 类似的
eval()
,但由于 Crystal 是编译的,所以显然没有太多可以使用的。
理想的解决方案应该是这样的:
...
def get(var)
@var
end
Crystal 标准库提供了简化 getter 和 setter 方法定义的宏:
使用
property
进行读/写访问,或使用 getter
进行只读访问:
class Coordinate
property x
getter y
def initialize(x : Int32, y : Int32)
@x = x
@y = y
end
end
point = Coordinate.new 10, 20
point.x = 30
puts point.x
puts point.y
30
20