Ruby setter 成语

标签 ruby idioms setter

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

相关文章:

Ruby/Grape 在特定条件下需要参数

ruby - 访问单例类

python - 命名将对象转换为另一种格式的方法的惯用 Python 方式

javascript - 使用错误记录处理处理管道的惯用功能方法是什么?

perl - 如何在perl的对象中制作 "universal"getter和setter?

html - 如果位于特定标签内,则删除特定标签

ruby - 全新安装 compass-inuit 后,启动 "compass watch"时出现错误

generics - 泛型类型的泛型构造函数的显式类型注释

oop - 为什么分别坚持 get-set 而不是 car.speed() 和 car.speed(55) ?

带有setter getter的Java字符串数组