Ruby雜湊(Hash)和陣列(Array)的指向特性
在Ruby當中如果把相同的變數分配到兩個不同地方,可能利用物件的特性,在兩個地方針對同一個變數進行修改。
一般的複製變數
如果將一個變數指定到另一個變數,該變數會用「複製」的方式指定過去。意思是說原本的物件不會受到影響。
# 當a指定到b的時候,變數會複製過去
# 如果改變b的內容,a並不會跟著改變
a = 10
b = a
b += 10
a
# => 10
Hash和Array是指向變數
但是對Hash來說,指定到不同其他變數時,在不同地方編修該變數,都會互相影響。以Hash為例:
a_hash = {}
b_hash = a_hash
b_hash[:hello] = "world"
a_hash
# => {:hello => "world"}
# hash並不是用「複製」的方式,而是直接指向該變數
當然,如果同樣情況下,我們要用「複製」的方式,就得用不同方式繞過去。
a = Array.new
b = a
c = a
b << 1
c
# => [1]
這邊可能會發生的問題就是如果c
這個Array要用於其他用途,就會和a變數產生混淆的情況。