Lai*_*ira 3 ruby setter idioms
我工作的一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}
Run Code Online (Sandbox Code Playgroud)
这很好,因为它显然是一个制定者,但是,经过一番思考,我认为它也可能令人困惑:用户可能认为边距只包含:left和:right值,什么是不对的.另一种选择是消除=并使其成为一种普通的方法:
chart.margins(:left => 10, :right => 15)
Run Code Online (Sandbox Code Playgroud)
使用这种语法,很容易弄清楚发生了什么,但它不是标准的setter并且与marginsgetter 冲突.而且还有另一种选择:
chart.margins(:left, 10)
chart.margins(:right, 15)
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么想.对我来说,很明显这个方法是一个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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1336 次 |
| 最近记录: |