我正在使用 Ruby v1.9.2 和 Ruby on Rails v3.2.2 gem。我有以下模块
module MyModule
extend ActiveSupport::Concern
included do
def self.my_method(arg1, arg2)
...
end
end
end
我想给类方法 my_method
起别名。所以,我陈述了以下(不工作)代码:
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
换句话说,我想以Module
某种方式扩展该类,以便在alias_class_method
整个MyModule
. 但是,我想让它工作并在我所有的 Ruby on Rails 应用程序中可用。
- 我应该把与
Module
类的 Ruby 核心扩展相关的文件放在哪里?也许在 Ruby on Railslib
目录中? - 我应该如何正确“扩展”
Module
核心扩展文件中的类? - 这是正确的方法吗?也就是说,例如,我应该“扩展”另一个类 (
Object
,BasicObject
,Kernel
, ...) 而不是Module
? 或者,我应该完全避免实施上述核心扩展吗?
但是,更重要的是,是否有一个 Ruby 功能可以让我完成我想要完成的工作,这样我就不必扩展它的类?