【问题标题】:Ruby on Rails ClassesRuby on Rails 类
【发布时间】:2015-03-02 13:11:03
【问题描述】:

当创建该类的新对象时,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")

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

【问题讨论】:

    标签: ruby class ruby-on-rails-4


    【解决方案1】:

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

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

    这是一个related Q&A,您可能会觉得很有启发性。最佳答案显示了一个更详细地解释它的示例,并深入了解了幕后实际发生的事情。

    【讨论】:

    • 好吧,这是有道理的。所以每个类默认都有一个初始化方法。
    • 你可以这样想,当然。此问答中有更多详细信息(我已添加到我的答案中):stackoverflow.com/questions/10383535/…
    【解决方案2】:

    当创建该类的新对象时,Ruby 会自动调用 initialize 方法。

    new 调用initialize 方法。

    Reference

    【讨论】:

    • 这是由于一些 ruby​​ on rails 内置方法还是可以初始化被称为任何东西。我对它为什么调用该方法感到困惑
    • 我猜是instance 而不是object
    • 必须叫initialize。这就是“新”的作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2016-10-09
    相关资源
    最近更新 更多