我正在使用波蘭語/前綴表示法構建計算器,我遇到了一個特殊問題。當程序碰到一個減法運算符時,它會拋出undefined method '-' for Fixnum (NoMethodError)
。這隻發生在-
;加法,乘法和除法都可以正常工作。更奇怪的是,當我用irb手動調用send
和:-
時,錯誤不會發生。該錯誤只發生在我運行我的程序時。發送使用發送' - '在Ruby中執行減法
def calc(exp)
exp = exp.split(" ")
operands = []
exp.reverse.each do |str|
if is_operator?(str)
op1 = operands.pop
op2 = operands.pop
str = str.to_sym
result = op1.send str, op2
operands.push(result)
else
operands.push(str.to_i)
end
end
operands.pop
end
def is_operator?(char)
char.to_i.to_s != char
end
exp = "− */15 − 7 + 1 1 3 + 2 + 1 1"
calc(exp)
test.rb:13:in `block in calc': undefined method `−' for 7:Fixnum (NoMethodError)
你可以發佈你的'is_operator?'方法嗎?一些輸入/輸出案例也會有幫助。請參閱[我如何問一個好問題?](http://stackoverflow.com/help/how-to-ask)和[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve) –
請讓我們看看你的函數的調用(你正在測試的'exp')。我們需要能夠重現您的問題來回答您。你的代碼適合'calc(「 - 2 1」)'。 – Amadan
謝謝,@JustinHellreich和@Amadan。增加了'is_operator?'和失敗的情況。 – charleszardo