试图评估一个表达式

时间:2013-06-02 20:38:12

标签: ruby rpn

我正在研究一个RPN计算器并认为我几乎就在那里,除了它返回表达式而不是解决方案。

def evaluate(expression)
  expression = expression.split

  operators = expression.select { |v| v =~ /\W/}
  operands  = expression.select { |v| v =~ /\d/}

  new_expression = operands.zip(operators)
  eval = new_expression.join
end

这应该返回-7

puts evaluate('5 8 + 4 - 5 *')
#=> 5+8-4*5

3 个答案:

答案 0 :(得分:1)

eval = new_expression.join

调用new_expression.join并将结果存储在名为eval的局部变量中。既然你从不使用那个局部变量,你也可以写下:

new_expression.join

如果您打算使用eval作为参数调用Ruby的new_expression.join方法,则应删除赋值运算符:

eval new_expression.join

如果您只评估可信输入,那么使用eval评估表达式只是一个好主意。

答案 1 :(得分:1)

它完全符合您所写的内容,我。即它使用String给出变量eval。解决方案:

def evaluate(expression)
  expression = expression.split

  operators = expression.select { |v| v =~ /\W/}
  operands  = expression.select { |v| v =~ /\d/}

  new_expression = operands.zip(operators)
  eval new_expression.join
end

puts evaluate('5 8 + 4 - 5 *')

答案 2 :(得分:0)

您正在创建一个名为eval的局部变量,但您确实希望将表达式作为参数调用Kernel#eval,如下所示:

eval operands.zip(operators).join