Ruby 为什么方法在调用';时不返回最后一条语句;超级';在…内

Ruby 为什么方法在调用';时不返回最后一条语句;超级';在…内,ruby,Ruby,方法的返回值是其最后一条语句的值。这意味着Myclass.new遵循initialize方法的以下定义,内部包含super: class Myclass < String def initialize(arg) super(arg.to_s) "something" end end 为什么?您不是在调用初始化,而是在调用新建。initialize方法本质上是一个钩子,在创建新对象时执行,但通常不会直接调用它。类方法new 创建一个新实例,然后 对创建的实例调用in

方法的返回值是其最后一条语句的值。这意味着
Myclass.new
遵循
initialize
方法的以下定义,内部包含
super

class Myclass < String
  def initialize(arg)
    super(arg.to_s)
    "something"
  end
end

为什么?

您不是在调用
初始化
,而是在调用
新建
initialize
方法本质上是一个钩子,在创建新对象时执行,但通常不会直接调用它。

类方法
new

  • 创建一个新实例,然后
  • 对创建的实例调用instance方法
    initialize
    ,该方法可能返回任何结果,如您的示例所示
  • 返回创建的实例

  • initialize
    new
    的返回值对
    new
    的返回值没有影响。如果要获取
    initialize
    方法的返回值,需要调用
    initialize
    方法。如果你调用一个完全不同的方法,你会得到一个完全不同的返回值是正常的。

    可能是因为initialize和new不是同一个函数?new的契约是返回创建的新对象(分配后初始化)。如果它在调用
    initialize
    时返回的结果值,它显然不会这样做。(除非您用
    返回self
    结束
    初始化
    的所有实现,否则这将非常恼人。)此外,
    新建
    的文档确实说明了上述内容。(引用:“调用
    allocate
    以创建类的类的新对象,然后调用该对象的
    initialize
    方法,并将其传递给args。”)这也是一个很好的解释:
    Myclass.new("test") # => "test"