Ruby 如果属性访问器包括一个元素,例如&x27;:名称';,是否需要';名称=';方法?

Ruby 如果属性访问器包括一个元素,例如&x27;:名称';,是否需要';名称=';方法?,ruby,attr-accessor,Ruby,Attr Accessor,前言:我确实理解attr_访问器的标准定义,并且知道attr_访问器代表两个实例方法——setter和writer,而attr_访问器允许在整个类中访问实例变量 但我偶尔会看到attr_访问器中包含一个元素,它被定义为一个方法 所以我的问题是:为什么会发生这种情况?我看到的只是坏代码吗 伪代码/示例代码: class Such_n_such attr_accessor :name, :color #code omitted def color=(

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

但我偶尔会看到attr_访问器中包含一个元素,它被定义为一个方法

所以我的问题是:为什么会发生这种情况?我看到的只是坏代码吗

伪代码/示例代码:

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

提前谢谢

是,
attr\u accessor
为该属性添加setter和getter方法,不,如果您需要自定义setter,这不是一个坏做法。假设你想要一个像你的例子一样的颜色设定器。您希望接受这样一个事实,即颜色可以是数字、字符串等。

我认为您不应该使用
attr\u访问器,然后覆盖setter

我更喜欢使用
attr\u reader
和自定义setter方法:

attr_accessor :name
attr_reader :color  

def color=(color)
  # ...
end

那么这两个不冲突吗?也就是说:attr_访问器是否被自定义setter覆盖?不,它不会被覆盖。它会被覆盖。这里没有继承,因此没有重写。setter和writer不是一回事吗?我不这么认为——setter设置值句点,如“def name@name=name”中所示,writer允许重新设置值,如“def name=(name)”中所示