alias_method und class_methods nicht mischen?
-
05-10-2019 - |
Frage
Ich habe mit einem globalen Cache-Modul zu basteln versucht, aber ich kann nicht herausfinden, warum dies nicht funktioniert.
Hat jemand irgendwelche Vorschläge?
Dies ist der Fehler:
NameError: undefined method `get' for module `Cache'
from (irb):21:in `alias_method'
... durch diesen Code generiert:
module Cache
def self.get
puts "original"
end
end
module Cache
def self.get_modified
puts "New get"
end
end
def peek_a_boo
Cache.module_eval do
# make :get_not_modified
alias_method :get_not_modified, :get
alias_method :get, :get_modified
end
Cache.get
Cache.module_eval do
alias_method :get, :get_not_modified
end
end
# test first round
peek_a_boo
# test second round
peek_a_boo
Lösung
Die Aufrufe alias_method
versuchen auf Beispiel: Methoden zu bedienen. Es gibt keine Instanz-Methode get
in Ihrem Cache
Modul mit dem Namen, so ist es nicht.
Weil Sie alias wollen Klasse Methoden (Methoden auf der Metaklasse von Cache
), würden Sie so etwas wie zu tun:
class << Cache # Change context to metaclass of Cache
alias_method :get_not_modified, :get
alias_method :get, :get_modified
end
Cache.get
class << Cache # Change context to metaclass of Cache
alias_method :get, :get_not_modified
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow