rails中的initialize方法有什么作用

时间:2012-11-04 07:46:39

标签: ruby-on-rails ruby-on-rails-3 attributes

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

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

是否初始化将实例变量@name@email设置为属性,如果是,为什么我们有参数attributes = {}

1 个答案:

答案 0 :(得分:35)

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

@person = Person.new

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

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

所有对象都有一个默认的initialize方法,它不接受任何参数(你不需要写一个 - 你自动获得它)。如果您希望对象在initialize方法中执行不同的操作,则需要定义自己的版本。

在您的示例中,您将散列传递给initialize方法,该方法可用于设置@name@email的默认值。

您可以使用以下内容:

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

初始化程序具有属性的默认值(attributes = {}将默认值设置为安培散列 - {})的原因是,您也可以在不必传递参数的情况下调用它。如果你没有指定参数,那么attributes将是一个空哈希,因此@name@email都将是nil值,因为这些键不存在任何值( :name:email)。