回答
這有幫助嗎?
a = %w(a b c) # create an array
p a # have a look at it
p a.object_id # this is how ruby references the array
# =>68669980
hash = {'a_key'=>a} #put it in a hash
p hash['a_key']# have a look at it again
p hash['a_key'].object_id # no copy, just a reference
# =>68669980
這裏要注意的重要一點是,一切都是Ruby中的參考。即使':foo'或'2'也只是對單例對象的引用。 – tadman
這應該回答你關於「引用的哈希值」的問題,對於數組:
array = [1,2]
hash = { :k1 => array, :k2 => array }
hash[:k1].push(3)
puts hash[:k2].inspect
=> [ 1, 2, 3 ]
正如你所看到的,數組變量是在Ruby中的底層對象的引用。 Ruby中的大多數對象都是如此,除了一些「直接」類型,例如Fixnum
和Float
。
因此,您可以根據需要爲數據結構使用Ruby,並使用指向同一對象的兩個散列鍵。請注意,如果您通過數據序列化進行往返,則可能無法保留該屬性,並且如果將新對象分配給其中一個鍵,則不會保留該屬性。
相關語言的語義是:
- Ruby的變量是對對象的引用。
- 賦值給變量,數組元素或散列鍵不會複製對象,它會在變量中存儲新的引用。
- 使用一個對象作爲參數的方法不創建一個副本,它通過一個參考
- 許多對
Array
,Hash
和String
方法將創建並返回新對象。有兩種方法出現一些方法,例如map
和map!
,其中前一版本返回一個新對象,後者更改該對象。 - 有一些例外情況:爲在作業中以及傳遞給方法時被複制的「立即」對象。這包括內置的數字類型。
我沒有機會檢查第二部分,但第一部分我的意思是一個散列,其值是引用而不是其鍵的引用。 –
@ Mouse.The.Lucky.Dog我沒有在我的答案中提到鑰匙作爲參考 - 對不起,如果有什麼措辭不好或令人困惑。任何Ruby對象都可以用作散列鍵,所有Ruby變量都是引用,但這不是「將引用用作散列鍵」。相反,Ruby安排如果兩個對象被認爲是相等的,他們將會產生相同的散列碼。因此,Ruby將把兩個*不同的*字符串對象作爲相同的哈希鍵,並將相同的內容'a =「hello」'和'b =「hello」作爲對象,並將不同的內容(在不同的時間)作爲兩個不同的鍵。 –
- 1. 使用鍵創建Ruby散列:值行
- 2. 創建散列值的數組引用
- 3. JavaScript創建表散列
- 4. Coffescript創建散列表
- 5. 如何在散列內創建散列
- 6. 創建散列
- 7. 創建您自己的散列表和散列表
- 8. 如何在Ruby中創建列表?
- 9. 無法在Ruby中創建散列哈希
- 10. 使用雙鍵創建散列表
- 11. 創建通用散列表時出錯
- 12. 在PHP中創建自己的散列?
- 13. 帶重複鍵的Ruby散列,用於創建URL參數
- 14. 取消引用散列元素中的列表引用
- 15. 爲什麼在感性散列中創建散列?
- 16. 使用Ruby創建Excel列表
- 17. 覆蓋ruby中的散列
- 18. 在Perl中創建一個散列
- 19. 散列表與arraylist並創建新的陣列列表
- 20. 如何在Ruby中使用正則表達式匹配作爲散列索引?
- 21. 如何創建一個散列表
- 22. Ruby數組到索引散列?
- 23. 在Python 3中爲我的類創建散列表
- 24. 我想在powershell中創建ou的散列表
- 25. 創建實例方法引用的散列
- 26. 如何爲File.stream創建分散引用?
- 27. 創建引用類型的列表
- 28. 在Perl中引用散列的哈希
- 29. 如何在ActiveRecords中的Ruby中創建對象的引用?
- 30. 在Ruby中創建陣列,Rails3中
舉例說明。 「按鍵類別」是什麼意思?你是什麼意思'複製紅寶石的語義。「? –
請提供一些示例輸入和輸出示例。 –