如果attr_accessor包含一个元素,例如。 ':名称',是否需要' name ='方法?

时间:2016-03-19 15:41:43

标签: ruby attr-accessor

前言:我确实理解attr_accessor的标准定义,并且知道attr_accessor代表两个实例方法 - 一个setter和一个writer,而attr_accessor允许实例变量在整个类中可访问。

但是我偶尔会看到attr_accessor中包含的元素并且被定义为方法。

所以我的问题是:为什么会这样?这只是我看到的糟糕代码吗?

伪/示例代码:

class Such_n_such
    attr_accessor :name, :color  
            #code omitted
       def color=(color)
         (some code)
       end

提前致谢!

2 个答案:

答案 0 :(得分:3)

我认为你不应该使用attr_accessor然后覆盖setter。

我更喜欢将attr_reader与自定义setter方法结合使用:

attr_accessor :name
attr_reader :color  

def color=(color)
  # ...
end

答案 1 :(得分:0)

是的,attr_accessor添加了该属性的setter和getter方法,如果您需要自定义setter,这不是一个不好的做法。假设你想要一个像你的例子一样的颜色设定器。你想要了解颜色可以是数字,字符串等......