31

我正试图围绕使用该initialize方法的目的。在 Hartl 的教程中,他使用了这个例子:

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

正在initialize设置实例变量@name@email属性,如果是这样,为什么我们有参数attributes = {}

4

1 回答 1

41

Ruby 使用该initialize方法作为对象的构造函数。它是 Ruby 语言的一部分,并非特定于 Rails 框架。当您实例化一个新对象时调用它,例如:

@person = Person.new

在 a上调​​用new类级别的方法Class会分配该类的类型,然后调用对象的initialize方法:

http://www.ruby-doc.org/core-1.9.3/Class.html#method-i-new

所有对象都有一个initialize不接受参数的默认方法(你不需要写一个 - 你会自动得到它)。如果你想让你的对象在方法中做一些不同的事情initialize,你需要定义你自己的版本。

在您的示例中,您将哈希传递给initialize可用于设置 and 的默认值的@name方法@email

您可以使用它,例如:

@person = Person.new({name: 'John Appleseed', email: 'john@some.net'})

初始化程序具有属性默认值(attributes = {}将默认值设置为 ampty 哈希 - {})的原因是,您也可以在无需传递参数的情况下调用它。如果您不指定参数,attributes则将是一个空哈希,因此两者@name@email都将是值,因为这些键(和)nil不存在值。:name:email

于 2012-11-04T07:51:08.053 回答