2016-12-06 4 views
1

Я тестировал этот код, и он не работает, как я ожидал. Может кто-то пролить свет на это, пожалуйста?Несколько случаев/когда условия с ||

language = { JS: "Websites", Python: "Science", Ruby: "Web apps" } 

puts "What language would you like to know? " 
choice = gets.chomp 
case choice 
when "js" || "JS" 
    puts "Websites!" 
when "Python" || "python" 
    puts "Science!" 
when "Ruby" || "ruby" 
    puts "Web apps!" 
else 
    puts "I don't know!" 
end 

, когда я положил в первой записи он работает, но если я использую последнюю запись печатает «Я не знаю!»

i.e: если я вхожу в «js» работает, но если я вхожу в «JS», он бросает «я не знаю!».

+1

@DilAzat: Конечно, поправки, которые вы получили правильные, но они надевают объясните, почему вы получили наблюдаемое поведение: в вашем исходном коде первое выражение * when * было эквивалентно «выбору === (« js »||« JS »). Теперь '' js "|| «JS» 'оценивает' 'js" ', поэтому у вас в основном был« выбор == »js», и именно поэтому он не работал для «JS» '. – user1934428

+0

Спасибо за ваши указатели! Я пробовал, и это работало как шарм :) Однако, "js" || «JS» оценивается как «js», поэтому у вас есть выбор == «js» <== это потому, что Ruby - это не очень строгий чувствительный к регистру язык или почему? почему он думал, что «js» совпадает с «JS»? Спасибо за миллион заблаговременно –

+0

X || Y оценивается до X, если только он не является «нил» или «ложь», и в этом случае он вычисляет значение Y. В '' js "|| «JS», «js», очевидно, ни ниль, ни ложь, поэтому «js» является возвращаемым значением выражения. Руби никогда не беспокоится о правильном аргументе. Мораль истории: узнайте своих операторов ;-) – user1934428

ответ

4

Пожалуйста, поиск, прежде чем задавать вопросы, вы можете получить ответ, легко и в других вопросах

choice = gets.chomp 
case choice 
when 'js', 'JS' 
    puts 'Websites!' 
when 'Python', 'python' 
    puts 'Science!' 
when 'Ruby', 'ruby' 
    puts 'Web apps!' 
else 
    puts "I don't know!" 
end 

После предложения

choice = gets.chomp 
puts case choice 
     when 'js', 'JS' 
     'Websites!' 
     when 'Python', 'python' 
     'Science!' 
     when 'Ruby', 'ruby' 
     'Web apps!' 
     else 
     "I don't know!" 
     end 
+1

Вы можете написать 'puts case choice.downcase', затем' when 'js' then 'Websites!'; когда "python" тогда .... '. –

+0

@CarySwoveland Спасибо, сэр! –

+0

Если это так, то это означает, что программа изменит запись в начале и добавив «.downcase» в основном, мне не нужно вводить «||», заявление ниже, не так ли? Возможно, я ошибаюсь, но чувствую, что, как я видел на каком-то материале, кто-то писал, как я писал, и это сработало. Однако, спасибо вам, ребята, я исправил вопрос, который у меня был. Спасибо :) –

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