我有一个名为 AB 的模块。现在它看起来像这样:
module AB
extend self
def some_method(hash)
....
end
....
end
我们这样使用它:AB.some_method(:thing=>:whatever,:etc=>'you get the idea')。用户必须传入大约六个字符串,我想将其转换为动态方法,这样他们就可以调用 AB 而不是 AB.some_method(:thing => :whatever...)。随便(...)或 AB::随便(...)。我以为我可以用 method_missing 做到这一点,但我想我不明白。我做了这样的事情:
module AB
def method_missing(name,*args)
super unless THINGS.include?(name.to_s)
...
end
end
但我在尝试调用 AB::whatever 时从未接触过该方法。我考虑过遍历 THINGS 并使用 define_method,但我不确定如何定义带参数的方法。
感谢任何帮助。
最佳答案
第二个代码示例中的问题是 method_missing
应该声明为 self.method_missing
。以下按预期工作:
module AB
THINGS = %w(whatever)
def self.method_missing(name, *args)
super unless THINGS.include?(name.to_s)
"responding to #{name}"
end
end
p AB.whatever #=> "responding to whatever"
p AB.something #=> NoMethodError
关于ruby - 模块中的动态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3390683/