Je suis venu avec cette fonctionnalité étrange (?) de tableaux dans Ruby et il serait très utile si quelqu'un pouvait m'expliquer pourquoi ils fonctionnent comme ils le font.Étrange fonctionnalité? de Ruby Arrays
D'abord, donnons un exemple de la façon dont les choses fonctionnent habituellement.
a = "Hello" #=> "Hello"
b = a #=> "Hello"
b += " Goodbye" #=> "Hello Goodbye"
b #=> "Hello Goodbye"
a #=> "Hello"
Ok, quand vous utilisez = il crée une copie de l'objet (cette fois une chaîne de caractères).
Mais lorsque vous utilisez des réseaux cela se produit:
a = [1,2,3] #=> [1,2,3]
b = a #=> [1,2,3]
b[1] = 5 #=> [1,5,3]
b #=> [1,5,3]
a #=> [1,5,3]
des thats Maintenant, juste étrange. C'est le seul objet que j'ai trouvé qui ne soit pas copié lors de l'utilisation de = mais qui crée simplement une réfraction à l'objet original.
Est-ce que quelqu'un peut aussi expliquer (il doit y avoir une méthode) pour copier un tableau sans le faire pointer vers l'objet d'origine?
.clone, ne semble pas fonctionner pour un tableau à deux démentielle. Je suppose qu'il clone le tableau externe, mais conserve les tableaux internes pointant vers les objets d'origine. Des idées ce que je ferais là? –
.dup a travaillé pour moi. a = [[1,2], [3,4]]; b = a.dup –