Wenn Sie sich im Block arr.each
befinden, ist die Variable colour
an eines der Objekte im Array arr
gebunden.
Sobald Sie jedoch im Block die Zuweisung colour = "green"
vornehmen, wird die Variable colour
an ein neues Objekt (nämlich einen String mit dem Wert "green"
) und das ursprüngliche arr
gebunden. bleibt unberührt.
Ein Weg, um zu erreichen, worüber du sprichst, wäre:
%Vor%welches das Array direkt manipuliert.
Die Farbe ist in der Tat eine Referenz auf das aktuelle Element im Array, aber mit 'color="green"' verweist sie jetzt auf eine neue Zeichenkette. Der alte bleibt unverändert. Versuchen Sie zu experimentieren,
zu ersetzen %Vor%mit einem oder mehreren von
%Vor%Alle funktionieren mit der vorhandenen Zeichenfolge und erstellen keine neue Zeichenfolge.
Um ein Array in ein anderes Array zu transformieren, verwenden Sie in Ruby nicht die Methode each
, sondern die Methode map
(Code nach Benutzer sflinter oben):
Oder, um ein bisschen allgemeiner zu sein, mit der Transformationskarte:
%Vor%wir können etwas wie
tun %Vor% PS: Wie von Phrogz unten vorgeschlagen, erstellt map
eine neue Instanz von array. Wenn Sie das modifizierte Array in der gleichen Variable belassen möchten, sollten Sie ihm das Ergebnis von map
zuweisen.
Andererseits gibt es map
's bösen Zwilling namens map!
, der das ursprüngliche Array in-place modifiziert (also keine Notwendigkeit, es zurück zuweisen), spart etwas Raum und Zeit, aber bricht das reine Funktional Programmierkonzept, dass Funktionen keine Nebenwirkungen haben sollten.