访问使用attr_accessor创建的变量

时间:2011-05-10 13:16:43

标签: ruby-on-rails ruby

我正在尝试了解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

1 个答案:

答案 0 :(得分:5)

color = "green"这样的表达式将"green"分配给属性的局部变量而不是。属性设置器总是需要一个接收器,即使接收器是self