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

If attr_accessor includes an element, eg. ':name', is there any need for the 'name=' method?

前言:我理解attr_accessor的标准定义,知道attr_accessor代表两个实例方法——一个setter和一个writer,attr_accessor允许在整个 class.

中都可以访问实例变量

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

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

Pseudo/example代码:

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

提前致谢!

是的,attr_accessor 为该属性添加了 setter 和 getter 方法,不,如果您需要自定义 setter,这不是一个坏习惯。假设您想要 setter 颜色,就像您的示例一样。您想接受颜色可以是数字、字符串等的事实...

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

我更喜欢使用 attr_reader 和自定义 setter 方法:

attr_accessor :name
attr_reader :color  

def color=(color)
  # ...
end