【问题标题】:Why does a method not return the last statement when we call 'super' inside?为什么当我们在内部调用“super”时,方法不返回最后一条语句?
【发布时间】:2013-09-06 02:25:37
【问题描述】:

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

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

应该返回"something"。但它会返回"test":

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

为什么?

【问题讨论】:

  • 可能是因为initialize和new不是同一个函数?
  • new 的约定是返回创建的新对象(分配然后初始化)。如果它返回调用initialize时的结果值,它显然不会那样做。 (除非您以 return self 结束所有 initialize 的实现,否则会非常烦人。)
  • 另外,new 的文档字面意思是上面的内容。 (引用:“调用allocate 来创建class 类的新对象,然后调用该对象的initialize 方法,并将其传递给args。”)跨度>
  • 这也是一个很好的解释:stackoverflow.com/questions/10383535/…

标签: ruby


【解决方案1】:

类方法new

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

initialize 到new 的返回值对new 的返回值没有影响。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-03
        • 2019-01-31
        • 2017-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-02
        相关资源
        最近更新 更多