Відповіді:
якщо i.між? (1, 10) робити річ 1 elsif i.між ними? (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...
якщо ви все-таки хотіли використовувати діапазони ...
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
і відповідно до цього показника у Fast Ruby швидше, ніжinclude?
Не пряма відповідь на питання, але якщо ви хочете навпаки "всередині":
(2..5).exclude?(7)
правда
exclude?
це додаток Rails .
Більш динамічна відповідь, яку можна побудувати в 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
Отже, у цьому випадку "хребти" дійсно просто обгороджуються нулями, щоб зловити граничні умови.
Для струн:
(["GRACE", "WEEKLY", "DAILY5"]).include?("GRACE")
# => правда
Date
іDateTime
об'єкти , а===
не робить.