Me encontré con un problema interesante al usar el método 'tap' en objetos del tipo 'String'.El método 'tap' en el objeto String no devuelve el resultado esperado
"abc".tap { |o| o = "xyz" } # this line returns "abc" instead of "xyz"
El método 'tap' funciona en objetos de otros tipos.
[].tap { |o| o << "xyz" } # this line returns ["xyz"] as expected
Estoy usando Rails 2.3.2 y Ruby 1.8.6 en Windows XP.
¿Qué me falta aquí?
Actualización 1: Resolví este problema. Fue un error de uso de mi parte. En el primer escenario, estaba reasignando el valor al parámetro de bloque en lugar de modificarlo. Pude reescribir el código y obtener el resultado esperado.
"abc".tap { |o| o.replace "xyz" }
Actualización 2: El código utilizado aquí es solo para demostrar el problema. Mi código actual no se ve así.
¿Podríamos tener un ejemplo real de lo que estás tratando de hacer? –
Resolví este problema. Fue un error de uso de mi parte. En el primer escenario, estaba reasignando el valor al parámetro de bloque en lugar de modificarlo. Pude reescribir el código y obtener el resultado esperado. "abc" .tap {| o | o.replace "xyz"} –