2
A
回答
2
見哈希#替換documentation
a = {:a => 'a'}
上面行創建在一個變量a
哈希對象並將其存儲,a
是到對象
a = {:a => 'a'}
=> {:a=>"a"}
2.0.0p247 :040 > a.object_id
=> 70094303544580
a = {:b => c}
上面參考第一行做的是同樣的事情,但它將覆蓋對內存中前一個Hash對象的引用
2.0.0p247 :042 > a = {:b => 'c'}
=> {:b=>"c"}
2.0.0p247 :043 > a.object_id
=> 70094303594480
見object_id
是不同
最後:
2.0.0p247 :044 > a.replace({b: "d"})
=> {:b=>"d"}
2.0.0p247 :045 > a
=> {:b=>"d"}
2.0.0p247 :046 > a.object_id
=> 70094303594480
替換爲我們指的是前面提到的同一個對象,但哈希對象的內容現在改變了,看到object_id
保持不變
2
這會爲變量a
分配一個新對象:
a = {:b => c}
而這使用現有的哈希和替換/刪除現有的值:
a.replace({:b => c})
2
分配不會做任何的變量先前指向對象,但replace
修改對象。
如果你有一段代碼指向到a
,那麼a
分配到不同的東西不改變:
a = {:a => 'a'}
b = a
c = [:bar, a, :baz]
a = {:b => :foo}
b # => {:a => 'a'}
C# => [:bar, {:a => 'a'}, :baz]
但replace
修改任何先前指向a
:
a = {:a => 'a'}
b = a
c = [:bar, a, :baz]
a.replace({:b => :foo})
b # => {:b => :foo}
C# => [:bar, {:b => :foo}, :baz]
相關問題
- 1. Python中的dict.clear()和賦值{}之間的區別
- 2. 默認和賦值運算符之間的PL/SQL區別
- 3. 迭代行與while和數組賦值之間的區別
- 4. tf.assign和賦值運算符之間的區別(=)
- 5. 賦值:屬性和類變量之間的區別?
- 6. 列表分配和元組賦值之間的區別?
- 7. 賦值符號=,:=和< - 之間有什麼區別?
- 8. 變量賦值和傳遞參考之間有什麼區別?
- 9. R中的惰性和替換之間的區別
- 10. 替換(/ [^ a-z0-9]/gi,'')和替換(/ [^ a-zA-Z0-9]/g'')之間的區別
- 11. automake中的賦值操作符之間的區別
- 12. 插入,刪除和替換之間有什麼區別
- 13. 之間的〜/和的區別../
- 14. '#','%'和'$'之間的區別
- 15. {!!之間的區別!!}和{{}}
- 16. '+ ='和'= +'之間的區別?
- 17. 「。+」和「。+?」之間的區別
- 18. .eq之間的區別。和==
- 19. #。/和#之間的區別。 ./
- 20. !=和!之間的區別==
- 21. 「%〜dp0」和「。\」之間的區別?
- 22. | =和^ = css之間的區別
- 23. 之間的區別。和#
- 24. ==和case之間的區別?
- 25. 「**/* /」和「** /」之間的區別?
- 26. jQuery - '。'之間的區別和「#」
- 27. 「?1」和「?」之間的區別
- 28. `%in%`和`==`之間的區別
- 29. fmod和%之間的區別
- 30. 之間的區別:+和:+
'對象#object_id'是一個很好的方法來解釋這個帖子..所以... +1 :) –
我很驚訝我得到了2票反對這個答案,並沒有人評論爲什麼需要投下的投票 – bjhaid
我知道......多次發生在我身上......忽略這些...... –