Ruby on Rails类

Con*_*nez 0 ruby class ruby-on-rails-4

RoR中的类是否在创建该类的新对象时自动启动第一个方法?

class User
 attr_accessor :name, :email

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

 def formatted_email
  "#{@name} <#{@email}>"
 end
end
Run Code Online (Sandbox Code Playgroud)

假设我像这样创建一个新用户

connor = User.new(name: "Connor B", email: "CB@example.com")
Run Code Online (Sandbox Code Playgroud)

它如何知道自动启动第一个方法,但第二个方法只在被调用时才有效?

jef*_*unt 5

它不是第一个自动new调用的方法,而是调用initialize,这恰好是您看到的大多数代码中的第一个方法.但是,您可以将initialize任何位置放在类定义中,new并仍然可以调用该initialize方法.

如果没有initialize明确定义的方法,则将调用默认方法.此外,这是一个Ruby行为,而不是 Ruby on Rails行为,只是为了澄清.

这是您可能会发现启发的相关问答.最上面的答案显示了一个更详细解释它的例子,并深入探讨了幕后实际发生的事情.