Ruby on rails 在Ruby中,如何使用动态分派调用方法(当方法是模块的一部分时)?

Ruby on rails 在Ruby中,如何使用动态分派调用方法(当方法是模块的一部分时)?,ruby-on-rails,ruby,methods,module,dynamic-binding,Ruby On Rails,Ruby,Methods,Module,Dynamic Binding,在Ruby语言中,我必须动态调用属于模块的方法,方法名作为存储字符串(比如:“ModuleName::Submodule:methodName”) 让我们考虑一下这个例子: module Dialogs def paperino(param) puts "paperino. param: #{param}" end end 如何在运行时调用(“parametro”) 我可以更好地解释: 如果该方法是类的一部分,我知道如何操作: 我实例化这个类(从字符串中,我调用meth

在Ruby语言中,我必须动态调用属于模块的方法,方法名作为存储字符串(比如:
“ModuleName::Submodule:methodName”

让我们考虑一下这个例子:

module Dialogs    
  def paperino(param)
    puts "paperino. param: #{param}"
  end
end
如何在运行时调用(“parametro”)

我可以更好地解释:

如果该方法是类的一部分,我知道如何操作: 我实例化这个类(从字符串中,我调用method对象):

以及没有显式类的方法的简单情况

def pippo(param)
  puts "pippo. param: #{param}"
end

method_object = Kernel.method(:pippo)
method_object.call "parametro"
但是,动态调用作为模块一部分的方法的语法是什么

在以下示例中:

module Dialogs    
  def paperino(param)
    puts "paperino. param: #{param}"
  end
end
我希望调用的方法是“Dialogs::paperino”

顺便说一句,我不想使用send()或eval(),只想使用call()

谢谢
乔治

我认为你做不到。在模块上以这种方式定义的方法并不意味着可以直接访问

Dialogs.paperino('a')
NoMethodError: undefined method `paperino' for Dialogs:Module
您可以使用
self

def self.paperino(param)
然后您就可以使用
方法访问它了

Dialogs.method(:paperino)
如果需要将其定义为
def paperino(param)
,可以通过以下方式访问该方法

method = (Object.new.extend(Dialogs)).method(:paperino)
method.call('foo')

这将定义一个新对象,然后使用模块
对话框扩展该对象。然后你就可以得到这个方法。

这样的方法不应该被调用。要么把模块放在某个地方,要么看看Thx!你的答案很清楚。我经常在Ruby中使用模块时遇到问题(同样适用于变量作用域:-)。
method = (Object.new.extend(Dialogs)).method(:paperino)
method.call('foo')