当我们在里面调用'super'时,为什么方法不返回最后一个语句?

时间:2013-09-03 00:16:02

标签: ruby

方法的返回值是其最后一个语句的值。这意味着Myclass.new遵循以下initialize方法中定义super的内容:

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

应该返回"something"。但它返回"test"代替:

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

为什么?

3 个答案:

答案 0 :(得分:8)

班级方法new

  1. 创建一个新实例,然后
  2. 在创建的实例上调用实例方法initialize,这可能会返回任何内容,如您的示例所示,然后
  3. 返回创建的实例。
  4. initializenew的返回值对new的返回值没有影响。

答案 1 :(得分:4)

您没有致电initialize,而是致电newinitialize方法本质上是一个在创建新对象时执行的钩子,但通常不会直接调用它。

答案 2 :(得分:1)

如果您想获得initialize方法的返回值,则需要调用initialize方法。如果你调用一种完全不同的方法,那么你将得到一个完全不同的返回值是正常的。