2

方法的返回值是其最后一条语句的值。这意味着Myclass.new遵循以下initialize方法的定义 with superinside:

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

应该返回"something"。但它"test"反而返回:

Myclass.new("test") # => "test"

为什么?

4

3 回答 3

8

类方法new

  1. 创建一个新实例,然后
  2. 在创建的实例上调用实例方法,该方法initialize可能会返回任何内容,如您的示例所示,然后
  3. 返回创建的实例。

initializeto的返回值对 fromnew的返回值没有影响new

于 2013-09-03T00:29:07.760 回答
4

你不是在打电话initialize,你在打电话new。该initialize方法本质上是一个钩子,在您创建新对象时执行,但通常从不直接调用。

于 2013-09-03T00:20:40.697 回答
1

如果你想得到你的initialize方法的返回值,你需要调用你的initialize方法。如果你调用一个完全不同的方法,你会得到一个完全不同的返回值是很正常的。

于 2013-09-03T08:14:38.663 回答