Ruby 上 Rails 节课

Ruby on Rails Classes

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

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")

它怎么知道自动启动第一个方法,而第二个方法只在调用时才起作用?

Ruby 在创建 class 的新对象时自动调用 initialize 方法。

new 调用 initialize 方法。

Reference

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

如果没有显式定义 initialize 方法,则会调用默认方法。此外,这是 Ruby 行为, 不是 Ruby 对 Rails 行为,只是为了澄清一下。

这里有一个 related Q&A 可能会对您有所启发。最上面的答案显示了一个示例,该示例更详细地解释了它,并深入探讨了幕后实际发生的事情。