Answers:
如果i.between(1,10) 做事情1 elsif i.between(11,20) 做事情2 ...
i.between?(1..10)
将无法正常工作(如果是..
)我想一定有它的一个原因
3.between?(1, 3) => true
使用===
运算符(或其同义词include?
)
if (1..10) === i
i
数字以外的其他事物一起工作的好处(例如nil
)
if i === (1..10)
将行不通
(1..10000000000000000)
不是数组。(1..10000000000000000) === 5000000000000000
在引擎盖下进行“中间”测试
如果您仍然想使用范围...
def foo(x)
if (1..10).include?(x)
puts "1 to 10"
elsif (11..20).include?(x)
puts "11 to 20"
end
end
你可以用
if (1..10).cover? i then thing_1
elsif (11..20).cover? i then thing_2
并根据这个基准在快速红宝石比快include?
可以在Ruby中构建的更动态的答案:
def select_f_from(collection, point)
collection.each do |cutoff, f|
if point <= cutoff
return f
end
end
return nil
end
def foo(x)
collection = [ [ 0, nil ],
[ 10, lambda { puts "doing thing 1"} ],
[ 20, lambda { puts "doing thing 2"} ],
[ 30, lambda { puts "doing thing 3"} ],
[ 40, nil ] ]
f = select_f_from(collection, x)
f.call if f
end
因此,在这种情况下,“范围”实际上只是用nil围起来,以捕捉边界条件。
Date
和DateTime
对象,===
而不适用于。