我正在处理一个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)

使用这种语法,很容易知道发生了什么,但它不是一个标准设置器,并且与marginsgetter冲突。还有另一个选择:
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

07-28 12:24