Metoda „stuknij” na obiekcie String nie zwraca oczekiwanego wyniku

Doszedłem do interesującego problemu podczas używania metody „tap” na obiektach typu „String”.

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

Metoda „stuknij” działa na obiektach innych typów.

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

Używam Rails 2.3.2 i Ruby 1.8.6 w systemie Windows XP.

Czego mi tu brakuje?

Aktualizacja 1: Rozwiązałem ten problem. To był błąd użytkowania z mojej strony. W pierwszym scenariuszu przypisałem wartość do parametru bloku zamiast go modyfikować. Udało mi się przepisać kod i uzyskać oczekiwany wynik.

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

Aktualizacja 2: Użyty tutaj kod służy tylko do zademonstrowania problemu. Mój rzeczywisty kod nie wygląda tak.

questionAnswers(1)

yourAnswerToTheQuestion