2013-04-15 107 views
0

我正在嘗試製作一個基於控制檯的計算器來練習一些Ruby,我使用'case'語句來檢查控制檯參數,然後使用Ruby的算術來解釋並返回結果。檢查一個字符串是否等於'*'

我遇到的問題是我無法讓Ruby執行與乘法相關聯的行。它只是去'else'塊並執行我的幫助方法。我除了指數所有其他方法我認爲紅寶石治療STAR字符「一切」(我不知道如何詞)

case @args[1] 
when '+' 
    puts "#{@args[0].to_i + @args[2].to_i}" 
when '-' 
    puts "#{@args[0].to_i - @args[2].to_i}" 
when '*' 
    puts "#{@args[0].to_i * @args[2].to_i}" 
when '/' 
    puts "#{@args[0].to_i/@args[2].to_i}" 
when '%' 
    puts "#{@args[0].to_i % @args[2].to_i}" 
when '**' 
    puts "#{@args[0].to_i**@args[2].to_i}" 
else 
    help 
end 

我知道它看起來狡猾,裸記住我打算固定一旦我有一切工作,它就會起來。

我是相當新的Ruby的,所以我不上什麼,我需要做的讓Ruby對待這些簡單恆星,而不是正則表達式100%肯定...

我向你保證,這不是功課,我只是想學習一些Ruby,因爲我最近也開始學習Rails。

+2

讓我猜測:你從shell中運行這個類似'ruby yourscript.rb 2 * 2'的東西?然後你的shell可能會把'*'當作[glob](http://en.wikipedia.org/wiki/Glob_(編程))並在它到達你的腳本之前展開它。 – hammar

+0

啊,我明白你的意思。 「./clk 5 * 8」我會去做一些關於如何在zsh中逃避的研究。謝謝錘子。 編輯:我逃脫與\ *在我的外殼。考慮這個問題已解決 –

回答

1

您是否嘗試通過書寫'\ *'來避開星號?

+0

啊我看到了,我現在會測試一下。編輯:這沒有奏效,謝謝你的建議。 –

+0

這可以在shell上轉義*時使用。 –

+0

啊,我錯過了。哈馬爾是現貨。 – AgilE

0

還有其他事情正在發生。這IRB會議確認的情況下,語句中的字符串工作,你所期望的方式:

str = '*' 
=> "*" 
>> case str 
>> when '*' then "foo" 
>> end 
=> "foo" 

仔細檢查@args[1]實際上是你認爲它是。

+0

感謝Rein,但它實際上是我的殼在我的問題的評論部分中與'hammer'提到的*符號相混淆,不過謝謝。 –

+0

別忘了,你實際上想要做的不是'case'語句,而是'calculator.send @args [1],@args [0],@args [2]',並且有'calculator '定義'#+'和'#*'等對象方法,所有這些都在捕獲'NoMethodError'的語句中。 –

相關問題