W trakcie korzystania z metody "tap" na obiektach typu "String" natknąłem się na interesujący problem.Metoda "dotknij" na obiekcie String nie zwraca oczekiwanego wyniku.
"abc".tap { |o| o = "xyz" } # this line returns "abc" instead of "xyz"
Metoda "dotknij" 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 na 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 ponownie przypisałem wartość do parametru bloku, zamiast go modyfikować. Byłem w stanie przepisać kod i uzyskać oczekiwany wynik.
"abc".tap { |o| o.replace "xyz" }
Aktualizacja 2: Kod używany tutaj ma jedynie na celu wykazanie problemu. Mój rzeczywisty kod nie wygląda tak.
Czy możemy mieć prawdziwy przykład tego, co próbujesz zrobić? –
Rozwiązałem ten problem. To był błąd użytkowania z mojej strony. W pierwszym scenariuszu ponownie 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"} –