我正在研究一个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
答案 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