attr_accessor如何在Ruby on Rails中工作

时间:2013-01-14 15:27:37

标签: ruby-on-rails ruby

  

可能重复:
  What is attr_accessor in Ruby?

以下是示例代码:

class User
  attr_accessor :name, :email

  def initialize(attributes = {})
    @name = attributes[:name]
    @email = attributes[:email] 
  end 

....

end

当我这样做时

example = User.new

它会创建一个空用户,我可以通过

指定其名称和电子邮件
example.name = "something"
example.email = "something" 

我的问题是,为什么这件事有效?计算机如何知道example.name表示类中的@name变量?我假设名称和:名称不同,在代码中我们没有明确告诉计算机example.name等同于:name symbol。

2 个答案:

答案 0 :(得分:5)

attr_accessor做的是它创建了几个方法,一个getter和一个setter。它使用您传递的符号来构造方法和实例变量的名称。看,这段代码:

class User
  attr_accessor :name
end

相当于此代码

class User
  def name
    @name
  end

  def name=(val)
    @name = val
  end
end

答案 1 :(得分:5)

attr_accessor :field与调用attr_reader :fieldattr_writer :field相同。那些反过来大致等于:

def field
  @field
end

def field=(value)
  @field = value
end

欢迎来到元编程的魔力。 ;)