クラス変数を定義して、my_macro
とinvoke_methods
の両方を意図どおりに使用できるように知っていますか?ありがとうございました!クラスメソッド、インスタンスメソッド、およびクラス変数を含むruby mixin
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
たぶんINIT最初の '@@ method_names = []' '@@ method_names << method_name' – Zabba
前に、私はこの試みた:' @@ method_names = [] @@ method_namesない限り、 @@ method_names << method_name'でも 'NameError:MyModule :: ClassMethods'の@@ method_namesの初期化されていないクラス変数 – Marcos
以下の場合を除き、これを行う:' @@ method_names = @@ method_names || [] ' – Zabba