En examinant la documentation de Ruby 1.9.3, Array # << et Array # push ont été conçus pour implémenter l'ajout d'un élément à la fin du tableau en cours. Cependant, il semble y avoir des différences subtiles entre les deux.
Celui que j’ai rencontré est que l’opérateur * peut être utilisé pour append le contenu d’un autre tableau entier au tableau actuel, mais seulement avec #push.
a = [1,2,3] b = [4,5,6] a.push *b => [1,2,3,4,5,6]
Tenter d’utiliser # << au lieu de cela donne diverses erreurs, selon qu'il est utilisé avec l'opérateur de points et / ou les parenthèses.
Pourquoi # << ne fonctionne-t-il pas de la même manière que #push? N'est-ce pas un alias pour l'autre?
Ils sont très similaires, mais pas identiques.
<<
accepte un seul argument et le place à la fin du tableau.
push
, d'autre part, accepte un ou plusieurs arguments, les poussant tous à la fin.
Le fait que <<
n'accepte qu'un seul object est la raison pour laquelle vous voyez l'erreur.
La raison pour laquelle <<
ne fonctionne pas et push
est que:
push
peut accepter de nombreux arguments (ce qui se passe quand vous le faites *b
). <<
accepte uniquement un seul argument. Un autre point important à noter ici est que <<
est également un opérateur. Et il a une priorité inférieure à celle de certains opérateurs comme l'opérateur ternaire. Cela pourrait entraîner des résultats inattendus. par exemple:
arr1, arr2 = [], [] arr1.push true ? 1 : 0 arr1 # => [1] arr2 << true ? 1 : 0 arr2 # => [true]
La principale différence entre Array # << et Array # push est
Array#<< # can be used to insert only single element in the Array Array#push # can be used to insert more than single element in the Array
Une autre différence importante est que, en cas d’insertion d’un seul élément,
Array # << est plus rapide que Array # push
L'parsing comparative peut aider à trouver la performance de ces deux manières, trouver plus ici .
La méthode push
ajoute un élément à la fin du tableau. Il peut avoir plusieurs arguments. <<
est utilisé pour initialiser le tableau et ne peut avoir qu'un seul argument, ajoute un élément à la fin du tableau s'il est déjà initialisé.