All'interno di un metodo in fase di esecuzione, esiste un modo per sapere se tale metodo è stato chiamato tramite super
in una sottoclasse? Per esempio.L'attuale metodo Ruby viene chiamato tramite super?
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!"
Come potrei scrivere via_super?
, o, se necessario, via_super?(:bar)
?
Sfortunatamente questo non funziona se entrambi, genitore e figlio includono 'SuperDetector'. – Stefan
@Stefan 'a meno che instance_methods.include?' – mudasobwa
@mudasobwa che impedirebbe al bambino di usare' SuperDetector' – Stefan