attr_accessor如何在Ruby on Rails中工作

How does attr_accessor work in Ruby on Rails

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is attr_accessor in Ruby?

下面是示例代码:

1
2
3
4
5
6
7
8
9
10
11
class User
  attr_accessor :name, :email

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

....

end

当我这样做的时候

1
example = User.new

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

1
2
example.name ="something"
example.email ="something"

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


attr_accessor :fieldattr_reader :fieldattr_writer :field相同。反过来,它们大致等于:

1
2
3
4
5
6
7
def field
  @field
end

def field=(value)
  @field = value
end

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


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

1
2
3
class User
  attr_accessor :name
end

等于此代码

1
2
3
4
5
6
7
8
9
class User
  def name
    @name
  end

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