如何使用ruby"case ... when"与不等式?

jpw*_*ynn 51 ruby switch-statement

你能用ruby做到这一点吗?它似乎"错过"了不平等的案件

 case myvar
 when  myvar < -5
    do somethingA
 when -5..-3
    do special_something_XX
 when -2..-1
    do special_something_YY
 when myvar == 0
    do somethingB
 when myvar > 0
    go somethingC
 end
Run Code Online (Sandbox Code Playgroud)

too*_*kit 100

您正在混合两种不同类型的案例陈述:

case var
when 1
  dosomething
when 2..3
  doSomethingElse
end

case
when var == 1
   doSomething
when var < 12
   doSomethingElse
end
Run Code Online (Sandbox Code Playgroud)

  • 哇,这段时间我没有意识到存在第二种类型.谢谢. (13认同)

小智 26

   case myvar
     when  proc { |n| n < -5 }
        do somethingA
     when -5..-3
        do special_something_XX
     when -2..-1
        do special_something_YY
     when proc { |n| n == 0 }
        do somethingB
     when proc { |n| n > 0 }
        go somethingC
     end
   end
Run Code Online (Sandbox Code Playgroud)

  • 一些解释和链接会很好. (9认同)

Pet*_*ter 8

我个人并不相信if语句不会更好,但如果你想要一个这种形式的解决方案:

Inf = 1.0/0

case myvar
when -Inf..-5
  do somethingA
when -5..-3
  do special_something_XX
when -2..-1
  do special_something_YY
when 0
  do somethingB
when 0..Inf
  do somethingC
end
Run Code Online (Sandbox Code Playgroud)

我的首选解决方案如下 在这里,顺序很重要,你必须重复这个myvar,但是要省略案例要困难得多,你不必重复每个边界两次,严格性(<vs <=而不是..vs ...)更加明显.

if myvar <= -5
  # less than -5
elsif myvar <= -3
  # between -5 and -3
elsif myvar <= -1
  # between -3 and -1
elsif myvar <= 0
  # between -1 and 0
else
  # larger than 0
end
Run Code Online (Sandbox Code Playgroud)