理解Ruby代码中使用的方法和语法
我想了解创建RPN计算器的代码:理解Ruby代码中使用的方法和语法,ruby,Ruby,我想了解创建RPN计算器的代码: class RPNCalculator def evaluate(expression) operators = ["+", "-", "*"] stack = [] array = expression.split(" ") array.each do |i| if operators.include?(i) second_operand = stack.pop first_ope
class RPNCalculator
def evaluate(expression)
operators = ["+", "-", "*"]
stack = []
array = expression.split(" ")
array.each do |i|
if operators.include?(i)
second_operand = stack.pop
first_operand = stack.pop
stack.push(first_operand.send(i, second_operand))
else
stack.push(i.to_i)
end
end
stack.pop
end
end
我不太明白这些话:
if operators.include?(i)
second_operand = stack.pop
first_operand = stack.pop
stack.push(first_operand.send(i, second_operand))
else
stack.push(i.to_i)
如果有人能给我一个完整的代码运行,这将是非常有帮助的。
stack
是一个保存计算中间状态的地方。最初,它是一个空数组。在计算过程中,应该用整数填充,最后,应该用单个整数填充,这是计算的结果
if运算符。include?(i)
检查下一个元素i
是否在运算符列表中[“+”、“-”、“*”]
。如果是,那么
second_operand = stack.pop
first_operand = stack.pop
删除堆栈中的最后两个元素
,以及
first_operand.send(i, second_operand)
计算值,其中i
为运算符,两个元素为操作数。然后
stack.push(...)
返回计算值。否则,
stack.push(i.to_i)
将元素(字符串)转换为整数,并附加到堆栈中。我自己对Ruby不是很在行,但其中一些也适用于其他语言,因此我将尝试一下 因此,当您到达您提到的块时,
array
包含等式,stack
为空。假设表达式是25*1+
,那么array
等于[“2”,“5”,“*”,“1”,“+”]
。每个
块将在数组
中迭代。首先,我们检查该项是否是运算符(在运算符数组中)。最初,它不是(它是2
),所以我们只是将它转换为一个数字,然后将其推送到堆栈中。所以现在stack
是[2]
。与下一次迭代相同,它不是运算符,因此现在的stack
是[2,5]
数组中的下一项是“*”,它确实存在于运算符数组中。因此,让我们设置为vars:我们从堆栈中弹出第一项,设置第二个操作数(即5),然后将另一项弹出到第一个操作数(2)中,并计算结果。这就是我们要做的。结果10现在进入堆栈
(现在是[10]
)
另一个数字,所以stack
现在是[10,1]
。然后是“+”。所以再次弹出10,弹出1,并进行加法,然后推回stack
:[11]
我们都完成了,所以从堆栈中弹出11并返回该值。玩电脑:对于字符串中的字符,写下所有步骤。或者如果你没有铅笔,放进很多打印语句。@Dave,另一个选择是买支铅笔。