這段代碼我得到了一個意外的回傳值:
str = ''; 'abc'.chars.map {|c| str<<c}
預期輸出:
["a", "ab", "abc"]
實際輸出:
["abc", "abc", "abc"]
添加一個puts(str)用于除錯:
str = ''; 'abc'.chars.map {|c| puts(str); str<<c}
a
ab
=> ["abc", "abc", "abc"]
為什么上面的代碼沒有回傳預期的輸出?謝謝。
uj5u.com熱心網友回復:
來自精美手冊:
字串 << 物件 → 字串。連接并
object回傳selfself
所以str << c在塊中改變str,然后塊本身評估為str.
你可以這樣說以獲得你想要的結果:
str = ''
'abc'.chars.map { |c| (str << c).dup }
uj5u.com熱心網友回復:
這是因為地圖中的每個元素都回傳對 的參考,str而不是 的值str。因此,您的地圖回傳 3 個對 的參考str,而不是str迭代時的值;因為每個對的參考都str指向記憶體中末尾的一個位置,這就是為什么您會看到3 次'abc'的最終值。str
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/417447.html
標籤:
上一篇:如何僅獲取陣列中的文本?
