当创建该类的新对象时,RoR中的类是否会自动启动第一个方法?
class User
attr_accessor :name, :email
def initialize(attributes = {})
@name = attributes[:name]
@email = attributes[:email]
end
def formatted_email
"#{@name} <#{@email}>"
end
end
假设我创建了一个像这样的新用户
connor = User.new(name: "Connor B", email: "CB@example.com")
如何知道自动启动第一个方法,但第二个方法只在被调用时才有效?
答案 0 :(得分:5)
这不是第一种自动调用的方法,而是new
调用initialize
,这恰好是大多数代码中的第一种方法看到。但是,您可以将initialize
放在类定义的任何位置,而new
仍会调用initialize
方法。
如果没有明确定义initialize
方法,则会调用默认方法。此外,这是一个Ruby行为,不 Ruby on Rails行为,只是为了澄清。
这里有related Q&A你可能会觉得很有启发性。最上面的答案显示了一个更详细解释它的例子,并深入探讨了幕后实际发生的事情。
答案 1 :(得分:1)