在Ruby中将一段字符串评估为代码

时间:2013-11-22 16:53:54

标签: ruby string

使用"4 / 10 + 5 x 3"

之类的字符串

你将如何解析Ruby中的字符串并评估数学?

注意:希望解决方案在可能的情况下不涉及正则表达式

4 个答案:

答案 0 :(得分:2)

您可以使用eval将字符串计算为Ruby代码。

  

eval(string [, binding [, filename [,lineno]]])

     

以字符串形式计算Ruby表达式。如果给出了绑定,那么   必须是Binding对象,评估在其上下文中执行。   如果存在可选的filename和lineno参数,它们将会出现   在报告语法错误时使用。

在你的情况下

string = '4 / 10 + 5 * 3'
eval(string)

请记住,您发布的字符串不是有效的Ruby代码。实际上,x无效,正确的运算符为*

答案 1 :(得分:1)

str = "4 / 10 + 5 x 3"
eval(str.tr("x","*"))

如果您想保留x,可以使用tr。

进行翻译

eval可以运行任何内容,因此不要尝试使用用户输入。

答案 2 :(得分:0)

str = "4 / 10 + 5 x 3"
result = eval(str)

答案 3 :(得分:0)

由于您尝试使用字符x进行乘法,因此当前代码将抛出语法错误。 您应该使用*运算符。

之后使用eval()很简单。但通常这应该避免。

result = eval("4 / 10 + 5 * 3")

对于数学解析,我会调查这个gem,我自己没有尝试过,但似乎比原始eval更好。