Я тестировал этот код, и он не работает, как я ожидал. Может кто-то пролить свет на это, пожалуйста?Несколько случаев/когда условия с ||
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», он бросает «я не знаю!».
@DilAzat: Конечно, поправки, которые вы получили правильные, но они надевают объясните, почему вы получили наблюдаемое поведение: в вашем исходном коде первое выражение * when * было эквивалентно «выбору === (« js »||« JS »). Теперь '' js "|| «JS» 'оценивает' 'js" ', поэтому у вас в основном был« выбор == »js», и именно поэтому он не работал для «JS» '. – user1934428
Спасибо за ваши указатели! Я пробовал, и это работало как шарм :) Однако, "js" || «JS» оценивается как «js», поэтому у вас есть выбор == «js» <== это потому, что Ruby - это не очень строгий чувствительный к регистру язык или почему? почему он думал, что «js» совпадает с «JS»? Спасибо за миллион заблаговременно –
X || Y оценивается до X, если только он не является «нил» или «ложь», и в этом случае он вычисляет значение Y. В '' js "|| «JS», «js», очевидно, ни ниль, ни ложь, поэтому «js» является возвращаемым значением выражения. Руби никогда не беспокоится о правильном аргументе. Мораль истории: узнайте своих операторов ;-) – user1934428