在運行時的方法中,有沒有辦法知道在子類中是否通過super
調用了該方法?例如。是通過超級調用的當前Ruby方法嗎?
module SuperDetector
def via_super?
# what goes here?
end
end
class Foo
include SuperDetector
def bar
via_super? ? 'super!' : 'nothing special'
end
end
class Fu < Foo
def bar
super
end
end
Foo.new.bar # => "nothing special"
Fu.new.bar # => "super!"
我怎麼能寫via_super?
,或者,如果必要的話,via_super?(:bar)
?
不幸的是,如果父母和孩子都包含「SuperDetector」,則這不起作用。 – Stefan
@Stefan'除非instance_methods.include?' – mudasobwa
@mudasobwa會阻止孩子使用'超級檢測器' – Stefan