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

Ruby:将字符串转换为方法调用,ruby,excel,Ruby,Excel,我对Ruby是新手。我正在尝试将字符串转换为中的方法调用 红宝石。我打算将所有函数调用存储在Excel工作表中,并 使用提取的字符串进行实际的方法调用。但我不是 能够转换从excel获得的字符串并将其用作 函数调用。我在某个地方读到Send()方法有助于转换 方法调用的字符串。但是我不能正确地使用它。对于 下面提到的代码我获得了一个“in”:未定义的方法 main:Object(NoMethodError)的执行_语句(5)' 我做错了什么?您应该在发送调用中传递参数。方法名称也需要是一个符

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




我做错了什么?

您应该在发送调用中传递参数。方法名称也需要是一个符号。换句话说,将函数名定义为符号,将参数定义为单独的变量,然后调用
send
,如下所示:

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

method_name = 'Execute_Statement'.to_sym
parameter = 5

send(method_name,parameter)

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

你可以采用这种不好的做法,即只需执行
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
块,您的案例不需要它。

这不是一个好做法,但您可以执行
eval(x)
谢谢您。我决定在excel的第一列中提供函数名,在该行的其余列中提供参数。我目前面临的问题是,我将在excel的第一列中发送多个函数(具有不同数量的参数),我需要我的代码来选择这些参数,并将其与send方法中的函数名一起发送。你能为这一需求提出一种方法吗?
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)