Necesito escribir un bucle que haga algo como:
if i (1..10)
do thing 1
elsif i (11..20)
do thing 2
elsif i (21..30)
do thing 3
etc...
Pero hasta ahora hemos recorrido caminos equivocados en términos de sintaxis.
ruby
integer
conditional
range
por cierto
fuente
fuente
Date
yDateTime
objetos mientras===
que no.i.between?(1..10)
no funcionará (si es así..
) supongo que debe haber una razón para ello3.between?(1, 3) => true
Use el
===
operador (o su sinónimoinclude?
)fuente
i
ser algo más que un número (comonil
)if i === (1..10)
no funcionará(1..10000000000000000)
No es una matriz.(1..10000000000000000) === 5000000000000000
solo está haciendo una prueba "entre" bajo el capóComo dijo @Baldu, use el operador === o use case / when que internamente usa ===:
fuente
si aún quisieras usar rangos ...
fuente
Por lo general, puede obtener un rendimiento mucho mejor con algo como:
fuente
Podrías usar
if (1..10).cover? i then thing_1 elsif (11..20).cover? i then thing_2
y de acuerdo con este punto de referencia en Fast Ruby es más rápido que
include?
fuente
No es una respuesta directa a la pregunta, pero si desea lo contrario a "dentro":
fuente
exclude?
es una adición de Rails .Una respuesta más dinámica, que se puede construir en Ruby:
Entonces, en este caso, los "rangos" realmente están cercados con nulos para capturar las condiciones de contorno.
fuente
Para cuerdas:
# => verdadero
fuente