設置我想知道什麼是Ruby中規範的方法來創建自定義的setter和getter方法。通常情況下,我會通過attr_accessor
來做到這一點,但我正在創建一個DSL。在DSL,setter方法被稱爲像這樣(使用=
符號將創建本地變量):因此紅寶石獲得在一個方法
work do
duration 15
priority 5
end
,他們必須這樣實現:
def duration(dur)
@duration = dur
end
然而,這使得實現吸氣劑有點棘手:創建一個名稱相同但沒有參數的方法只會覆蓋setter。
所以我寫這兩者都做了設置和獲取自定義的方法:
def duration(dur=nil)
return @duration = dur if dur
return @duration if @duration
raise AttributeNotDefinedException, "Attribute '#{__method__}' hasn't been set"
end
這是一個很好的路要走呢?下面是與測試用例要點:
謝謝!
這可能是「聰明」,但它是一個相當知名的習慣用法,所以我肯定會讓它在代碼審查中滑動。 –
謝謝,這些都是很棒的點子。我沒有用於將值設置爲零的用例,但無論如何,最好知道如何覆蓋它。 – abbottjam