当我尝试完成RPN计算器分配时,我一直收到错误,该分配是测试优先学习Ruby材料的一部分。当我进行以下rspec测试时,我得到“nil无法强制进入fixednum”并且无法获得“计算器为空”错误。任何帮助将非常感激。
it "fails informatively when there's not enough values stacked away" do
expect {
calculator.plus
}.to raise_error("calculator is empty")
class RPNCalculator
attr_accessor :stack
def initialize
@stack = [0]
end
def push(x)
@stack.push(x)
end
def plus
@stack.push(@stack.pop + @stack.pop)
end
def minus
@stack.push(-@stack.pop + @stack.pop)
end
def divide
denom = @stack.pop
@stack.push(@stack.pop.to_f / denom)
end
def times
@stack.push(@stack.pop * @stack.pop)
end
def value
@stack.last
end
def pop(x)
value = @stack.pop(x)
raise "calculator is empty" if @stack.nil?
return value
end
end
答案 0 :(得分:0)
您收到该错误是因为您尝试在0
方法中添加nil
和plus
,nil
来自弹出空堆栈。
您没有收到错误,因为@stack
永远不会是nil
,因为您从未向其分配nil
。然而,它将是empty?
,这是您需要检查的内容。您还需要检查之前之前的条件以弹出堆栈。