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

时间:2014-10-23 20:29:47

标签: ruby methods function-pointers

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

启动脚本分别从core.rb和main_objobj1类的对象obj2val1创建该类的对象val2

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)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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

"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

我相信这会让你的代码更有效。