2013-04-15 3 views
0

Я пытаюсь сделать калькулятор на основе консоли, чтобы практиковать некоторый Ruby, я использую оператор case для проверки аргументов консолей, а затем использую арифметику Ruby для интерпретации и возврата результата.Проверьте, является ли строка равным '*'

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить Ruby выполнить линию, связанную с умножением. Он просто переходит в блок «else» и выполняет мой метод помощи. У меня есть все другие методы, кроме экспоненте я полагаю, рубин лечит символы звезды, как «Все» (я не знаю, как слово, что)

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, так что я не уверен на 100% от того, что мне нужно сделать, чтобы иметь Руби относиться к этим, как простые звезды, а не регулярные выражения ...

Уверяю вас, это не домашнее задание, Я просто пытаюсь изучить Ruby, так как недавно я начал изучать Rails.

+2

Позвольте мне угадать: вы используете это из оболочки с чем-то вроде ruby ​​yourscript.rb 2 * 2'? Тогда ваша оболочка, скорее всего, будет обрабатывать '*' как [glob] (http://en.wikipedia.org/wiki/Glob_ (программирование)) и расширять ее до того, как она даже достигнет вашего скрипта. – hammar

+0

А я понимаю, что вы говорите «да», точно. »./clk 5 * 8« Я поеду некоторое исследование о том, как избежать этого в zsh. Спасибо молот. EDIT: Я убежал с \ * в моей оболочке. Рассмотрите этот вопрос RESOLVED –

ответ

1

Вы пытались избежать звездочки, написав '\ *'?

+0

А я вижу, я сейчас проверю это. EDIT: Это не помогло, спасибо за предложение. –

+0

Это срабатывает при выходе * на оболочку. –

+0

А, я пропустил это. Хаммар был на месте. – AgilE

0

Есть что-то еще. Это IRB сессия подтверждает, что строки в случае заявления работают так, как вы ожидаете:

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

Дважды проверьте, что @args[1] на самом деле то, что вы думаете.

+0

Спасибо, Рейн, но на самом деле моя оболочка возилась с символом *, как упоминалось в разделе «Забастовка» в комментарии к моему вопросу, спасибо. –

+0

И не забывайте, что то, что вы на самом деле хотите сделать, это не оператор 'case', а' calculator.send @args [1], @args [0], @args [2] 'и имеющий« калькулятор » 'Объектные методы, такие как' # + 'и' # * 'определены, все это в инструкции catch 'NoMethodError'. –

Смежные вопросы