Как написать оператор switch в Ruby - PullRequest
1956 голосов
/ 04 июня 2009

Как мне написать оператор switch в Ruby?

Ответы [ 23 ]

1 голос
/ 25 января 2019

Мы можем написать оператор switch для нескольких условий.

Например,

x = 22

CASE x
  WHEN 0..14 THEN puts "#{x} is less than 15"    
  WHEN 15 THEN puts "#{x} equals 15" 
  WHEN 15 THEN puts "#{x} equals 15" 
  WHEN 15..20 THEN puts "#{x} is greater than 15" 
  ELSE puts "Not in the range, value #{x} " 
END
1 голос
/ 20 марта 2019

Важно подчеркнуть запятую ',' в условии когда действует как || оператора if, то есть он выполняет сравнение ИЛИ, а не сравнение И между выражениями с разделителями в предложении когда. Так что ознакомьтесь с приведенным ниже заявлением. Ясно, что x не меньше 2, но возвращаемое значение - «яблоко». Зачем? Поскольку x было 3 и, поскольку ',' действует как ||, он не потрудился оценить выражение 'x <2'. </p>

x = 3
case x
  when 3, x < 2 then 'apple'
  when 3, x > 2 then 'orange'
end
 => "apple"

Вы можете подумать, что для выполнения AND вы можете сделать что-то вроде этого ниже. Но это не работает. Это потому, что (3 && x> 2) оценивается как true, а ruby ​​принимает значение True и сравнивает его с x с ===, что, очевидно, неверно, поскольку x равен 3.

case x
  when (3 && x < 2) then 'apple'
  when (3 && x > 2) then 'orange'
end
 => nil 

Чтобы выполнить сравнение &&, вам нужно обработать регистр как, и если еще блок:

case
  when x == 3 && x < 2 then 'apple'
  when x == 3 && x > 2 then 'orange'
end

В книге Ruby Programming Language Матц говорит, что эта последняя форма является простой (и редко используемой) формой, которая является не чем иным, как альтернативным синтаксисом для if / elsif / else. Однако, независимо от того, используется это редко или нет, я не вижу другого способа присоединить несколько выражений && для данного предложения «когда».

1 голос
/ 08 июля 2014

Я начал использовать:

a = "secondcase"

var_name = case a
  when "firstcase" then "foo"
  when "secondcase" then "bar"
end

puts var_name
>> "bar"

В некоторых случаях помогает компактный код.

...