Manière correcte de remplir un tableau avec une plage en Ruby

Je travaille sur un livre qui donne des exemples de gammes converties en tableaux équivalents en utilisant leurs méthodes “to_a”

Quand j’exécute le code dans irb je reçois l’avertissement suivant

warning: default `to_a' will be obsolete 

Quelle est la bonne alternative à l’utilisation de to_a?

existe-t-il d’autres moyens de remplir un tableau avec une plage?

Vous pouvez créer un tableau avec une plage en utilisant splat,

 >> a=*(1..10) => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

en utilisant la méthode du Kernel ,

 Array (1..10) => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

ou en utilisant to_a

 (1..10).to_a => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

Cela fonctionne pour moi en irb:

 irb> (1..4).to_a => [1, 2, 3, 4] 

Je remarque que:

 irb> 1..4.to_a (irb):1: warning: default `to_a' will be obsolete ArgumentError: bad value for range from (irb):1 

Alors peut-être vous manque-t-il les parenthèses?

(J’utilise Ruby 1.8.6 patchlevel 114)

On dirait que vous faites ça:

 0..10.to_a 

L’avertissement provient de Fixnum # to_a, pas de la plage # to_a. Essayez plutôt ceci:

 (0..10).to_a 

Vérifie ça:

 a = [*(1..10), :top, *10.downto( 1 )] 

J’ai juste essayé d’utiliser des quantités plus grandes ou plus petites et j’ai obtenu le résultat auquel je ne m’attendais pas:

 irb(main):007:0> Array(1..5) => [1, 2, 3, 4, 5] irb(main):008:0> Array(5..1) => [] 

C’est à cause des implémentations de gammes.
J’ai donc dû utiliser l’option suivante:

 (1..5).to_a.reverse 

C’est une autre façon:

irb> [* 1..10]

=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]