Ruby:将字符串转换为方法调用

时间:2014-01-24 07:58:31

标签: ruby excel

我是Ruby新手。我正在尝试将字符串转换为方法调用 红宝石。我打算将所有函数调用存储在Excel工作表中 使用提取的字符串进行实际的方法调用。但我不是 能够转换从excel获得的字符串并将其用作 功能调用。我在某处读到Send()方法有助于转换 字符串到方法调用。但我无法正确使用它。为了 下面提到的代码我为main:Object(NoMethodError)获取了一个“in <top (required)>': undefined method Execute_Statement(5)”


 begin
    def Execute_Statement(var1)
    puts("Hello",var1)
    end
 end

x='Execute_Statement(5)' #This would be fed from the Excel Worksheet

send(x)

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以采用不良做法,即只做eval(x)。如果不想采用它,请做以下工作:

def Execute_Statement(var1)
  puts("Hello",var1)
end
s = "Execute_Statement(5)" # I hope this is coming from your excel cell.
method_name,number = s[/.*(?=\()/],s[/\d+/]
send(method_name,number.to_i)

删除begin..end块,您的案例不需要它。

答案 1 :(得分:0)

您应该将参数作为发送调用的一部分传递。方法名称也必须是符号。换句话说,将函数名称定义为符号,并将参数定义为单独的变量,然后像这样调用send

def Execute_Statement(var1)
  puts("Hello",var1)
end

method_name = 'Execute_Statement'.to_sym
parameter = 5

send(method_name,parameter)

如上述评论者所说,这似乎不是一个好主意。