Je travaille sur un livre qui donne des exemples de plages converties en tableaux équivalents en utilisant leurs méthodes "to_a"
Quand j'exécute le code dans irb j'obtiens l'avertissement suivant
warning: default `to_a' will be obsolete
Quelle est l'alternative correcte à l'utilisation de to_a?
existe-t-il d'autres moyens de renseigner 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 Kernel
Array
,
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 dans 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 les parenthèses?
(Je cours Ruby 1.8.6 patchlevel 114)
On dirait que tu fais ça:
0..10.to_a
L'avertissement provient de Fixnum # to_a, pas de la plage # to_a. Essayez ceci à la place:
(0..10).to_a
Vérifie ça:
a = [*(1..10), :top, *10.downto( 1 )]
J'ai juste essayé d'utiliser des gammes allant de plus en 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 plages.
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]