我在'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:我解決了這個問題。這是我的一個使用錯誤。在第一種情況下,我將值重新分配給block參數,而不是修改它。我能夠重寫代碼並獲得預期的結果。
"abc".tap { |o| o.replace "xyz" }
更新2:此處使用的代碼僅用於演示此問題。我的實際代碼不像這樣。
我們可以有一個你想要做什麼的真實例子嗎? –
我解決了這個問題。這是我的一個使用錯誤。 在第一種情況下,我將值重新分配給塊參數,而不是修改它。 我能夠重寫代碼並獲得預期的結果。 「abc」.tap {| o | o.replace「xyz」} –