web-dev-qa-db-ja.com

使用方法Ruby "case ... when"不等式?

これをルビーでできますか?不等式のケースを「見逃している」ようです

 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
49
jpwynn

2つの異なるタイプのcaseステートメントを混合しています。

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

case
when var == 1
   doSomething
when var < 12
   doSomethingElse
end
99
toolkit
   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

私はあなたが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

私の好ましい解決策は次のとおりです。ここでは順序が重要であり、myvarを繰り返す必要がありますが、ケースを除外するのははるかに難しく、各バウンドを2回繰り返す必要がなく、厳密性(< 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
7
Peter
def project_completion(percent)
 case percent
  when  percent..25
    "danger"
  when percent..50
    "warning"
  when percent..75
    "info"
  when percent..100
    "success"
  else
   "info"
  end
end
4
Majid Mushtaq

infinity を使用すると役立つ場合があります

case var
when -Float::INFINITY..-1
when 0
when 1..2
when 3..Float::INFINITY
end
1
Vadym Tyemirov