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

DateyDateTimeobjetos mientras===que no.i.between?(1..10)no funcionará (si es así..) supongo que debe haber una razón para ello3.between?(1, 3) => trueUse el
===operador (o su sinónimoinclude?)fuente
iser algo más que un número (comonil)if i === (1..10)no funcionará(1..10000000000000000)No es una matriz.(1..10000000000000000) === 5000000000000000solo 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_2y 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