Die 'tap'-Methode für das String-Objekt gibt kein erwartetes Ergebnis zurück

Ich bin auf ein interessantes Problem gestoßen, als ich die 'Tap'-Methode für Objekte vom Typ' String 'verwendet habe.

"abc".tap { |o| o = "xyz" } # this line returns "abc" instead of "xyz"

Die Tap-Methode funktioniert für Objekte anderer Typen.

[].tap { |o| o << "xyz" } # this line returns ["xyz"] as expected

Ich verwende Rails 2.3.2 und Ruby 1.8.6 unter Windows XP.

Was vermisse ich hier?

Update 1: Ich habe dieses Problem behoben. Es war ein Verwendungsfehler von meiner Seite. Im ersten Szenario habe ich den Wert dem Blockparameter neu zugewiesen, anstatt ihn zu ändern. Ich konnte den Code umschreiben und das erwartete Ergebnis erzielen.

"abc".tap { |o| o.replace "xyz" }

Update 2: Der hier verwendete Code dient nur zur Veranschaulichung des Problems. Mein aktueller Code sieht nicht so aus.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage