考虑以下代码:
class Hello
def hi
puts "Hello"
end
end
class HelloWorld < Hello
def hi
super.hi
puts "World"
end
end
HelloWorld.new.hi
Run Code Online (Sandbox Code Playgroud)
给出输出:
$ ruby super.rb
Hello
super.rb:9:in `hi': undefined method `hi' for nil:NilClass (NoMethodError)
from super.rb:14:in `<main>'
Run Code Online (Sandbox Code Playgroud)
为什么Hello打印出来?我希望得到错误.此外,我知道我真正应该做的只是打电话super而不是,super.hi但我想了解"引擎盖下"正在发生的事情.
super已经自动调用被覆盖的方法.什么情况是,hi在Hello回报率nil,因为它根本puts返回nil(和它的最后一个表达式).所以Ruby求值super,调用该方法,然后它尝试hi从结果nil对象访问该方法,并且没有.