【发布时间】: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