“如何使用ruby”;案例什么时候;不平等?

“如何使用ruby”;案例什么时候;不平等?,ruby,switch-statement,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 case myvar

你能用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
case myvar
当myvar<-5时
做点什么
当-5..-3
做一些特别的事情
当-2..-1
做些特别的事情
当myvar==0时
做点什么
当myvar>0时
去做点什么
结束

我个人不认为使用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
,但要省去案例要困难得多,您不必重复每个绑定两次,严格性(
您混合了两种不同类型的案例语句:

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

case
when var == 1
   doSomething
when var < 12
   doSomethingElse
end
案例变量
当1
剂量
当2..3
多索霉素
结束
案例
当var==1时
剂量
当var<12时
多索霉素
结束
案例myvar
当proc{n|n<-5}
做点什么
当-5..-3
做一些特别的事情
当-2..-1
做些特别的事情
当proc{n | n==0}
做点什么
当proc{n|n>0}
去做点什么
结束
结束
使用可能会有所帮助


您可以使用正则表达式捕捉不同的情况instead@Flexo:你的方法能处理科学记数法吗?谢谢,这对我很有帮助,一个相对的新手!哇,一直以来我都没有意识到第二种类型的存在。谢谢。上面写满了eli5!我最喜欢的解释:)我个人认为,使第二种选择更清楚的是评论,而不是事实上如果使用elsif而不是case when。也就是说,我更喜欢if-elsif,但只是因为它比较短。一些解释和链接会很好。这种方式似乎有点黑客,可能会导致将
percent
与自身进行多次比较<代码>案例
/
当百分比
case var
when 1
  dosomething
when 2..3
  doSomethingElse
end

case
when var == 1
   doSomething
when var < 12
   doSomethingElse
end
   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
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
case var
when -Float::INFINITY..-1
when 0
when 1..2
when 3..Float::INFINITY
end