Я столкнулся с интересной проблемой при использовании метода "tap" для объектов типа "String".
"abc".tap { |o| o = "xyz" } # this line returns "abc" instead of "xyz"
Метод "tap" работает с объектами других типов.
[].tap { |o| o << "xyz" } # this line returns ["xyz"] as expected
Я использую Rails 2.3.2 и Ruby 1.8.6 в Windows XP.
Что мне здесь не хватает?
Обновление 1: я решил эту проблему. Это была ошибка использования с моей стороны. В первом сценарии я повторно назначил значение блочному параметру вместо его изменения. Я смог переписать код и получить ожидаемый результат.
"abc".tap { |o| o.replace "xyz" }
Обновление 2: Используемый здесь код просто для демонстрации проблемы. Мой фактический код не выглядит так.