我正在处理一个 Chart
类,它有一个 margin
参数,它包含 :top
、:bottom
、:right
和 :left
值。我的第一个选择是使 margin
成为 setter 并像这样设置值:
# Sets :left and :right margins and doesn't alter :top and :bottom
chart.margins = {:left => 10, :right => 15}
这很好,因为它显然是一个 setter,但经过一番思考,我认为它也可能令人困惑:用户可能认为边距仅包含 :left
和 :right
值,什么是不对的。另一种选择是消除 =
并使其成为普通方法:
chart.margins(:left => 10, :right => 15)
使用这种语法,很容易弄清楚发生了什么,但它不是标准的 setter 并且与 margins
getter 冲突。还有另一种选择:
chart.margins(:left, 10)
chart.margins(:right, 15)
我不知道该怎么想。对我来说,很明显该方法是一个 setter,但是这次我不能一次调用就设置多个值,getter 又出现了问题。我是 Ruby 的新手,还没有习惯所有的习惯用法。那么,小伙伴们怎么看呢?哪个是最佳选择?
最佳答案
您也可以创建一个 Margin 类来享受以下清晰的语法:
class Margin
attr_accessor :left, :right, :top, :bottom
...
end
class Chart
attr_accessor :margins
...
end
chart.margins.left = 10
puts chart.margins.right
关于Ruby setter 成语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1819517/