ruby - 模块中的动态方法?

标签 ruby dynamic module methods

我有一个名为 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/

相关文章:

java - Java中如何读取二进制32位定点数

css - 如何根据将您带到该站点的 url 在 Symfony2 中获取特定于客户的配色方案

java - 学习网络语言的顺序

python - 使用 Python 实现负载均衡

ruby - 使模块继承自 Ruby 中的另一个模块

ruby-on-rails - Rails ActiveModel::Serializer 嵌套响应在 "data":父级

ruby 去除公共(public)元素集合

ruby-on-rails - 安装 pg (1.2.3) 时出错,Bundler 无法继续

javascript - 如何将文本框动态添加到单击编辑的文本部分?

python - 在 python 中构建一个调用图,包括模块和函数?