【发布时间】:2011-06-23 19:29:29
【问题描述】:
您知道如何定义@@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_name之前先初始化@@method_names = [] -
我试过这个:
@@method_names = [] unless @@method_names; @@method_names << method_name但得到了NameError: uninitialized class variable @@method_names in MyModule::ClassMethods -
这样做而不是使用除非:
@@method_names = @@method_names || [] -
谢谢。当然,更红,但仍然给出同样的错误。