141 votes

Déterminer si une variable est dans la plage? (Rubis)

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, nous avons emprunté les mauvais chemins en termes de syntaxe. Toute aide serait très appréciée.

315voto

rogerdpack Points 12806
si i.entre (1, 10)
  faire la chose 1 
elsif i.entre entre? (11,20)
  faire la chose 2 
...

90voto

Baldu Points 3374

Utilisez l'opérateur === (ou son synonyme include? )

 if (1..10) === i
 

71voto

Vincent Robert Points 16530

Comme @Baldu l'a dit, utilisez l'opérateur === ou le cas d'utilisation / lorsque celui-ci utilise en interne ===:

 case i
when 1..10
  # do thing 1
when 11..20
  # do thing 2
when 21..30
  # do thing 3
etc...
 

42voto

Tim Hoolihan Points 6982

si vous vouliez toujours utiliser des gammes ...

 def foo(x)
 if (1..10).include?(x)
   puts "1 to 10"
 elsif (11..20).include?(x)
   puts "11 to 20"
 end
end
 

9voto

Brad Werth Points 6249

Vous pouvez généralement obtenir de meilleures performances avec quelque chose comme:

 if i >= 21
  # do thing 3
elsif i >= 11
  # do thing 2
elsif i >= 1
  # do thing 1
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X