Eu preciso escrever um loop que faz algo como:
if i (1..10)
do thing 1
elsif i (11..20)
do thing 2
elsif i (21..30)
do thing 3
etc...
Até agora, porém, seguimos os caminhos errados em termos de sintaxe.
ruby
integer
conditional
range
btw
fonte
fonte
Date
eDateTime
objetos, enquanto===
não funciona.i.between?(1..10)
não vai funcionar (se for..
) Suponho que deve haver uma razão para isso3.between?(1, 3) => true
Use o
===
operador (ou seu sinônimoinclude?
)fonte
i
sendo algo mais do que um número (comonil
)if i === (1..10)
não funcionará(1..10000000000000000)
não é uma matriz.(1..10000000000000000) === 5000000000000000
está apenas fazendo um "entre" teste sob o capôComo o @Baldu disse, use o operador === ou caso de uso / quando o qual usar internamente ===:
fonte
se você ainda queria usar intervalos ...
fonte
Geralmente, você pode obter um desempenho muito melhor com algo como:
fonte
Você poderia usar
if (1..10).cover? i then thing_1 elsif (11..20).cover? i then thing_2
e de acordo com essa referência no Fast Ruby é mais rápido que
include?
fonte
Não é uma resposta direta à pergunta, mas se você quiser o contrário de "dentro":
fonte
exclude?
é uma adição ao Rails .Uma resposta mais dinâmica, que pode ser construída em Ruby:
Portanto, neste caso, os "intervalos" são realmente limitados a zero para capturar as condições de contorno.
fonte
Para cordas:
# => true
fonte