Ruby范围:case语句中的运算符

时间:2013-04-17 16:21:28

标签: ruby-on-rails ruby

我想检查my_number是否在某个范围内,包括更高的值。

在IF声明中,我只使用“x> 100& x< = 500”

但是我应该在Ruby案例(交换机)中做什么?

使用:

case my_number
when my_number <= 500
    puts "correct"
end

不起作用。

注意:

标准范围不包括如果my_number正好是500的情况,并且我不想添加第二个“when”,因为我必须写双内容

case my_number
# between 100 and 500
when 100..500
    puts "Correct, do something"
when 500
    puts "Correct, do something again"
end

4 个答案:

答案 0 :(得分:6)

它应该像你说的那样工作。以下case构造包含值500.

case my_number
# between 100 and 500
when 100..500
    puts "Correct, do something"
end

所以:

case 500
  when 100..500
    puts "Yep"
end

将返回Yep

或者,如果值完全 500,您是否要执行单独的操作?

答案 1 :(得分:3)

when -Float::INFINITY..0

会做的伎俩:)

答案 2 :(得分:1)

你可以这样做:

(1..500).include? x

也被别名为member?

答案 3 :(得分:0)

这里是一种case捕获方式,可以根据需要捕获"x > 100 && x <= 500:一个封闭范围内的值,其中不包括起始值,而包含了结束值。另外,显示了捕获前后的范围。

case my_number
when ..100;         puts '≤100'
when   100..500;    puts '>100 and ≤500'
when        500..;  puts '>500'
end

说明:

  • 范围从-Infinity开始的一端遗漏了。转到Infinity。这是introduced in Ruby 2.6
  • 范围x..y包含结束值,范围x...y包含结束值。
  • 所有范围均包含起始值。要创建不包含起始值的范围的等效项,可以在前面的when情况下捕获起始值。即使when,第二种"x > 100 && x <= 500情况也等同于您的(100..500).include? 100。对于第三种情况也是如此。