考虑这段代码:
class Hello
def hi
puts "Hello"
end
end
class HelloWorld < Hello
def hi
super.hi
puts "World"
end
end
HelloWorld.new.hi
给出输出:
$ ruby super.rb
Hello
super.rb:9:in `hi': undefined method `hi' for nil:NilClass (NoMethodError)
from super.rb:14:in `<main>'
为什么要打印 Hello?我希望只是得到错误。我也知道我真正应该做的只是调用 super
而不是 super.hi
但我想了解“幕后”发生了什么。
最佳答案
super
已经自动调用了被覆盖的方法。发生的事情是 Hello
中的 hi
返回 nil
,因为它只是简单地执行 puts
并返回 nil
(这是最后一个表达式)。所以 Ruby 评估调用方法的 super
,然后它尝试从生成的 nil
对象访问 hi
方法,但没有.
关于ruby - 尝试使用 Ruby super 直接调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17902929/