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.