0

可能重复:
Ruby 中的 attr_accessor 是什么?

这是示例代码:

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 变量?我假设 name 和 :name 是不同的,并且在代码中我们没有明确告诉计算机 example.name 等同于 :name 符号。

4

2 回答 2

5

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

class User
  attr_accessor :name
end

相当于这段代码

class User
  def name
    @name
  end

  def name=(val)
    @name = val
  end
end
于 2013-01-14T15:31:16.793 回答
5

attr_accessor :field与调用attr_reader :fieldand相同attr_writer :field。反过来,它们大致等于:

def field
  @field
end

def field=(value)
  @field = value
end

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

于 2013-01-14T15:31:26.473 回答