如果 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
前言:我理解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