将方法名作为字符串传递给Ruby中不同类的其他方法?

将方法名作为字符串传递给Ruby中不同类的其他方法?,ruby,methods,function-pointers,Ruby,Methods,Function Pointers,我有val1.rb和val2.rb,它们分别有名为foo1和foo2的方法,一个名为startup.rb的启动脚本和一个名为core.rb的主脚本 启动脚本从core.rb创建类的对象main_obj,并分别创建val1和val2类的对象obj1和obj2 Core希望调用一个它接受作为参数的方法 下面是我编写的代码,但它抛出一个错误,称为未定义的方法“foo1” # #### foo1.rb #### # class Test1 def foo1(par1) puts "par1 is

我有val1.rb和val2.rb,它们分别有名为
foo1
foo2
的方法,一个名为startup.rb的启动脚本和一个名为core.rb的主脚本

启动脚本从core.rb创建类的对象
main_obj
,并分别创建
val1
val2
类的对象
obj1
obj2

Core希望调用一个它接受作为参数的方法

下面是我编写的代码,但它抛出一个错误,称为未定义的方法“foo1”

# #### foo1.rb #### #
class Test1
 def foo1(par1)
  puts "par1 is :#{par1}"
 end
end

# #### core.rb #### #
class Core
 def main_test (validation_obj, validation_method)
   par1 = 'sample'
   validation_obj.send :validation_method, par1
   # other way #
   # validation_method.call(par1)
 end 
end

# #### startup.rb #### #
require_relative 'core'
require_relative 'foo1'
require_realtive 'foo2'

main_obj = Core.new
testobj_1 = Test1.new
testobj_2 = Test2.new

method_name = 'foo1' # ==> want to pass this method as string 
main_obj.main_test(testobj_1, method_name)
method_name = 'foo2'
main_obj.main_test(testobj_2, method_name)

非常感谢您的帮助

我认为您需要将字符串转换为符号

"foo".to_sym
以及您的代码:

class Core
 def main_test (validation_obj, validation_method)
   par1 = 'sample'
   validation_obj.send validation_method.to_sym, par1
   # other way #
   # validation_method.call(par1)
 end 
end

我相信这将使您的代码正常工作。

您的问题实际上与要处理的文件数无关。您可以通过定义将要使用的类来简化。你还需要更清楚地了解你所问的问题。您会说,“核心希望调用一个方法…”。什么是核心?您已经提到了一个文件“core.rb”和一个类
core
。给你所说的方法一个名称、类和参数,并说出你希望该方法返回的内容。举个具体的例子会很有帮助。另外,
main\u test.new
意味着
main\u test
是一个类,它不是。只需将
:validation\u method
更改为
validation\u method
您在编写
:validation\u method
时正在创建一个
符号
,它正试图调用一个名为
validation\u method
的方法。不要创建这个符号,只需传递参数即可
validation\u obj.send validation\u method,par1
@engineersmnky,感谢您的输入。最初,我只是尝试通过“验证方法”。然而,它给我带来了相同的未定义方法错误,使我将字符串更改为symbol(我相信使用“:”是我转换为symbol的错误方法)!执行@engineersmnky的建议,并执行
Test1#foo1
。考虑到您没有类
Test2
,执行
Test2#foo2
将更加困难@CarySwoveland和所有人,我为我的问题含糊不清表示诚挚的歉意。我编辑了错误的代码部分。
#send
处理
字符串
问题在于他创建的符号没有引用变量。当他编写
:validation\u method
时,它没有引用
validation\u method
参数,而是传递该符号。True。我看到了。这个问题也是如此令人困惑。很难理解他到底想要什么。安德烈,我同意,但当问题像这里这样含糊不清时,我建议你在回答之前在评论中寻求澄清。安德烈,卡里,工程师斯姆基,感谢你的意见。我接受了解决我的问题的答案。