Со следующим кодом:
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
.