'String'型のオブジェクトに対して 'tap'メソッドを使用しているときに興味深い問題に遭遇しました。Stringオブジェクトの 'tap'メソッドが期待した結果を返さない
"abc".tap { |o| o = "xyz" } # this line returns "abc" instead of "xyz"
「tap」メソッドは、他のタイプのオブジェクトでも機能します。
[].tap { |o| o << "xyz" } # this line returns ["xyz"] as expected
Windows XPでRails 2.3.2とRuby 1.8.6を使用しています。
私はここで何が欠けていますか?
更新1:この問題は解決しました。それは私の使い方の誤りでした。最初のシナリオでは、ブロックパラメータを変更するのではなく、ブロックパラメータに値を再割り当てしていました。私はコードを書き直し、期待される結果を得ることができました。
"abc".tap { |o| o.replace "xyz" }
更新2:ここで使用されているコードは、問題を示すためのものです。私の実際のコードはこのようには見えません。
あなたがしようとしていることの本当の例がありますか? –
この問題は解決しました。それは私の使い方の誤りでした。 最初のシナリオでは、ブロックパラメータを変更するのではなく、ブロックパラメータに値を再割り当てしていました。 私はコードを書き換えて、期待される結果を得ることができました。 "abc" .tap {| o | o.replace "xyz"} –