Je travaille sur un livre qui donne des exemples de plages converties en tableaux équivalents en utilisant leurs méthodes "to_a"
Lorsque j'exécute le code dans irb, j'obtiens 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 façons de remplir un tableau avec une plage?
Réponses:
Vous pouvez créer un tableau avec une plage en utilisant splat,
en utilisant la
Kernel
Array
méthode,ou en utilisant to_a
la source
order = 1
. Alorsorder << (2.25).to_a
. Mais cela crée un autre tableau à l'intérieur du tableau, je veux simplement la plage de 2 à 25. Pourtant, si j'essaye,order << (2.25)
j'obtiens l'erreur ne peut pas convertir Range en entier.concat
au lieu de<<
. De plus, vous ne devriez pas obtenir "impossible de convertir la plage en nombre entier" à moins qu'il ne s'agisse d'order
un entier - auquel cas vous seriez en train de changer de bit, pas d'ajouter un tableau.(1..10).to_a
pour la compatibilité descendante[*1..10]
.Cela fonctionne pour moi dans irb:
Je remarque que:
Alors peut-être que vous manquez les parenthèses?
(J'utilise Ruby 1.8.6 patchlevel 114)
la source
Fixnum.methods.include?(to_a)
dans ruby 1.9.2, vous remarquerez que la méthode to_a n'est plus définie, d'où la raison pour laquelle vous receviez ce message de dépréciation en 08Fixnum.instance_methods.include?(:to_a)
methods.include?
c'est plus informatif:$ irb
irb(main):001:0> Fixnum.methods.include?(to_a)
(irb):1: warning: default
to_a 'sera obsolète=> false
irb(main):002:0> Fixnum.instance_methods.include?(:to_a)
=> false
to_a
avertissement dans la première forme. C'est parce que vous appelezto_a
leself
- vous ne vérifiez pas réellement sito_a
est une méthode de Fixnum. Essayez d'appelerto_a
par lui-même et vous verrez le même avertissement.On dirait que tu fais ça:
L'avertissement provient de Fixnum # to_a, et non de Range # to_a. Essayez plutôt ceci:
la source
Vérifie ça:
la source
C'est une autre façon:
la source
J'ai juste essayé d'utiliser des plages allant de plus grandes à plus petites et j'ai obtenu le résultat auquel je ne m'attendais pas:
C'est à cause des implémentations de plages.
J'ai donc dû utiliser l'option suivante:
la source
5.downto(1).to_a
une autre façon d'exprimer une plage décroissante stackoverflow.com/a/8927009/703903