【发布时间】:2011-06-16 03:14:47
【问题描述】:
使用以下代码:
class ObjA
def func
puts "ObjA"
end
end
module Mod
def func
puts "Mod"
end
end
class ObjB < ObjA
include Mod
def func
puts "super called"
super
puts "super.func called"
super.func
end
end
运行ObjB.new.func 会导致:
ruby-1.9.2-p180 :002 > ObjB.new.func
super called
Mod
super.func called
Mod
NoMethodError: undefined method `func' for nil:NilClass
from test.rb:19:in `func'
from (irb):2
我了解super 的作用——它调用超类的当前方法。 include Mod 使 Mod 成为下一个超类,因此调用了 Mod#func。
但是,super.func 在做什么?我认为它等同于super,但是虽然它确实打印出相同的输出,但它也会抛出一个NoMethodError。
【问题讨论】: