回答:
間にある場合(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
はボンネットの下で「間」テストを行っているだけです
@Balduが言ったように、===演算子を使用するか、内部で===を使用するユースケース/場合:
case i
when 1..10
# do thing 1
when 11..20
# do thing 2
when 21..30
# do thing 3
etc...
あなたは使うことができます
if (1..10).cover? i then thing_1
elsif (11..20).cover? i then thing_2
そしてFast Rubyのこのベンチマークによれば、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で囲われています。
文字列の場合:
(["GRACE", "WEEKLY", "DAILY5"]).include?("GRACE")
#=> true
Date
とDateTime
オブジェクトに対しても機能しますが、===
機能しません。