Wie kann man eine Klassenmethode innerhalb eines Moduls aliasen?
Ich benutze Ruby v1.9.2 und den Ruby on Rails v3.2.2 Gem. Ich hatte das folgende Modul
module MyModule
extend ActiveSupport::Concern
included do
def self.my_method(arg1, arg2)
...
end
end
end
und ich wollte den aliasKlassenmethode my_method
. Also erklärte ich Folgendes (funktioniert nicht) Code:
module MyModule
extend ActiveSupport::Concern
included do
def self.my_method(arg1, arg2)
...
end
# Note: the following code doesn't work (it raises "NameError: undefined
# local variable or method `new_name' for #<Class:0x00000101412b00>").
def self.alias_class_method(new_name, old_name)
class << self
alias_method new_name, old_name
end
end
alias_class_method :my_new_method, :my_method
end
end
Mit anderen Worten, ich dachte, das zu verlängernModule
Klasse irgendwie, um eine hinzuzufügenalias_class_method
Methode überall verfügbarMyModule
. Ich würde es aber gerne schaffenarbeiten undzu Verfügung stehen in all meinen Ruby on Rails-Anwendungen.
Module
Klasse? Vielleicht im Ruby on Railslib
Verzeichnis?Wie soll ich das richtig "verlängern"?Module
Klasse in der Core-Extension-Datei?Ist es der richtige Weg, um fortzufahren? Das ist zum Beispiel, sollte ich eine andere Klasse "erweitern" (Object
, BasicObject
, Kernel
, ...) eher, alsModule
? oder sollte ich es vermeiden, die erwähnte Core-Erweiterung überhaupt zu implementieren?Aber,wichtigerGibt es eine Ruby-Funktion, die mein Ziel erreicht, sodass ich die Klassen nicht erweitern muss?