我想知道 Ruby 中创建自定义 setter 和 getter 方法的规范方法是什么。通常,我会这样做,attr_accessor
但我是在创建 DSL 的上下文中。在 DSL 中,setter 是这样调用的(使用=
符号将创建局部变量):
work do
duration 15
priority 5
end
因此,它们必须像这样实现:
def duration(dur)
@duration = dur
end
然而,这使得实现 getter 有点棘手:创建一个具有相同名称但没有参数的方法只会覆盖 setter。
所以我编写了自定义方法来进行设置和获取:
def duration(dur=nil)
return @duration = dur if dur
return @duration if @duration
raise AttributeNotDefinedException, "Attribute '#{__method__}' hasn't been set"
end
这是一个很好的方法吗?这是测试用例的要点:
谢谢!