Мне нужно написать цикл, который делает что-то вроде:
if i (1..10)
do thing 1
elsif i (11..20)
do thing 2
elsif i (21..30)
do thing 3
etc...
Но до сих пор пошли по неверному пути с точки зрения синтаксиса.
ruby
integer
conditional
range
кстати
источник
источник
Date
иDateTime
объекты , а===
не делает.i.between?(1..10)
не будет работать (если это так..
), я полагаю, должна быть причина для этого3.between?(1, 3) => true
Используйте
===
оператор (или его синонимinclude?
)источник
i
чем-то, кроме числа (напримерnil
)if i === (1..10)
не сработает(1..10000000000000000)
не массив(1..10000000000000000) === 5000000000000000
просто делает «промежуточный» тест под капотомКак сказал @Baldu, используйте оператор === или используйте case /, когда внутренне используется ===:
источник
если вы все еще хотите использовать диапазоны ...
источник
Обычно вы можете получить намного лучшую производительность с чем-то вроде:
источник
Вы могли бы использовать
if (1..10).cover? i then thing_1 elsif (11..20).cover? i then thing_2
и в соответствии с этим тестом в Fast Ruby быстрее, чем
include?
источник
Не прямой ответ на вопрос, но если вы хотите противоположность «внутри»:
источник
exclude?
это дополнение к Rails .Более динамичный ответ, который можно встроить в Ruby:
Таким образом, в этом случае, «диапазоны» на самом деле просто ограничены нулями, чтобы поймать граничные условия.
источник
Для строк:
# => Верно
источник