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

问题描述 投票:6回答:4

我想检查my_number是否在一定范围内,包括较高的Value。

在IF语句中,我只是使用“ x> 100 && x <= 500”

但是在Ruby情况下(交换机)我应该怎么做?

使用:

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

不起作用。

注意:

如果My_number恰好是500,并且我不想添加第二个“时间”,则标准范围不包括这种情况,因为我必须写两倍的Content内容

case my_number
# between 100 and 500
when 100..500
    puts "Correct, do something"
when 500
    puts "Correct, do something again"
end
ruby-on-rails ruby
4个回答
6
投票

它应该像您说的那样工作。下面的case构造includes值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

或者如果值是exactly 500,您是否想执行单独的操作?


4
投票
when -Float::INFINITY..0

会做把戏:)


1
投票

您可以做:

(1..500).include? x

也别名为member?


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。对于第三种情况类似。
© www.soinside.com 2019 - 2024. All rights reserved.