你知道如何定义@@method_names
类变量,这样既my_macro
和invoke_methods
可以使用它作为故意的吗?谢谢!红宝石混入与类方法,实例方法和类变量
module MyModule
module ClassMethods
def my_macro method_name, options = { }
define_method method_name do
puts "defining #{method_name} with #{options}"
end
@@method_names << method_name
end
end
def invoke_methods
@@method_names.each { |method_name| send method_name }
end
def self.included includer
includer.extend ClassMethods
end
end
class MyClass
include MyModule
my_macro :method_foo, :bar => 5
my_macro :method_baz, :wee => [3,4]
end
MyClass.new.invoke_methods
也许初始化第一个'@@ method_names = []''之前@@ method_names << method_name' – Zabba
我尝试这样做:'@@ method_names = []除非@@ method_names; @@ method_names << method_name'但得到'NameError:在MyModule中未初始化的类变量@@ method_names :: ClassMethods' – Marcos
做的,而不是使用除非:'@@ method_names = @@ method_names || []' – Zabba