我正试图围绕使用该initialize
方法的目的。在 Hartl 的教程中,他使用了这个例子:
def initialize(attributes = {})
@name = attributes[:name]
@email = attributes[:email]
end
正在initialize
设置实例变量@name
和@email
属性,如果是这样,为什么我们有参数attributes = {}
?
我正试图围绕使用该initialize
方法的目的。在 Hartl 的教程中,他使用了这个例子:
def initialize(attributes = {})
@name = attributes[:name]
@email = attributes[:email]
end
正在initialize
设置实例变量@name
和@email
属性,如果是这样,为什么我们有参数attributes = {}
?
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