2014-01-24 71 views
0

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


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

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

send(x) 

我在做什么错?

+0

不是一个好的做法,但你可以做'eval(x)' –

回答

0

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

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

method_name = 'Execute_Statement'.to_sym 
parameter = 5 

send(method_name,parameter) 

正如批评家上述表示,这似乎不是一个好主意。

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块,它不需要你的情况。

+0

谢谢奥雅纳。我决定在Excel的第一列中提供函数名称,并在该行的其余列中提供参数。我目前面临的问题是,我将在我的Excel的第一列中发送多个函数(具有不同数量的参数),我需要我的代码来选择这些参数,并将这些参数与Send方法中的函数名一起发送。你能否提出一个满足这种需求的方法? – user3231104