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