J'ai besoin d'écrire une boucle qui fait quelque chose comme:
if i (1..10)
do thing 1
elsif i (11..20)
do thing 2
elsif i (21..30)
do thing 3
etc...
Mais jusqu'à présent, ils ont emprunté les mauvais chemins en termes de syntaxe.
J'ai besoin d'écrire une boucle qui fait quelque chose comme:
if i (1..10)
do thing 1
elsif i (11..20)
do thing 2
elsif i (21..30)
do thing 3
etc...
Mais jusqu'à présent, ils ont emprunté les mauvais chemins en termes de syntaxe.
si i.entre? (1, 10) faire la chose 1 elsif i.entre? (11,20) faire la chose 2 ...
Date
et lesDateTime
objets, mais===
pas.i.between?(1..10)
ne fonctionnera pas (si c'est le cas..
) Je suppose qu'il doit y avoir une raison à cela3.between?(1, 3) => true
Utilisez l'
===
opérateur (ou son synonymeinclude?
)la source
i
autre chose qu'un nombre (commenil
)if i === (1..10)
ne fonctionnera pas(1..10000000000000000)
n'est pas un tableau.(1..10000000000000000) === 5000000000000000
fait juste un test "entre" sous le capotComme @Baldu l'a dit, utilisez l'opérateur === ou utilisez le cas / quand qui utilise en interne ===:
la source
si vous vouliez toujours utiliser des plages ...
la source
Vous pouvez généralement obtenir de bien meilleures performances avec quelque chose comme:
la source
Vous pourriez utiliser
if (1..10).cover? i then thing_1 elsif (11..20).cover? i then thing_2
et selon cette référence dans Fast Ruby est plus rapide que
include?
la source
Pas une réponse directe à la question, mais si vous voulez le contraire de "dedans":
la source
exclude?
s'agit d'un ajout de Rails .Une réponse plus dynamique, qui peut être intégrée dans Ruby:
Donc, dans ce cas, les «plages» sont en réalité simplement délimitées par des nils afin de capturer les conditions aux limites.
la source
Pour les cordes:
# => vrai
la source