我正在尝试了解attr_accessor
让我访问的内容。据我所知,它提供了getter和setter方法。所以attr_accessor :color
它会为我创建类似下面的东西
def color
@color
end
def color=(value)
@color = value
end
我不明白为什么在下面的代码中,为什么我不能在初始化程序中使用color=
? (它最终是空白的)。为什么我需要使用@color=
或self.color=
? color=
不应该成为调用刚刚为我创建的setter方法的方法吗?
class Bird
attr_accessor :color
def initialize(c="green")
color = c # this doesn't work
# either one of the following DOES work
# @color = c
# self.color = c
end
end
puts Bird.new.color # prints nothing unless using @color or self.color
答案 0 :(得分:5)
像color = "green"
这样的表达式将"green"
分配给属性的局部变量而不是。属性设置器总是需要一个接收器,即使接收器是self
。