在Ruby中,Symbol和String是兩種不同的數據類型,它們之間有一些重要的區別:
Symbol 是不可變的,一旦創建,它的值不能被修改。每個Symbol都是唯一的。這使得Symbol非常適合用作哈希表的鍵,因為它們的比較速度非常快。
String 是可變的,你可以更改String的內容。這代表我們可以通過修改String的字符來改變它的值。String物件在修改時會創建新的實例,因此它們不具有Symbol那種唯一性。
由於Symbol的不可變性和唯一性,它們在內存中只有一個實例。如果你在代碼中多次使用相同的Symbol,實際上只有一個Symbol物件。這可以節省內存。
String物件在每次修改時都會創建一個新的實例,因此如果我們有多個相同的字符串,它們會佔用不同的內存空間。
Symbol 通常用於表示某種標識或名稱,例如 : 方法名、哈希鍵、枚舉值等。它們在程式中作為不可變的常數使用。
String 用於表示文本和字符數據。你可以對文本進行各種操作,例如 : 拆分、連接、修改等。
# 使用 string 宣告一樣的字串但記憶體位置不同。
# 使用 symbol 宣告一樣的符號,會指向同一個記憶體位置。
name1 = 'dojo'.object_id; # 60
name2 = 'dojo'.object_id; # 80
symbol1 = :dojo.object_id # 1199388
symbol2 = :dojo.object_id # 1199388
總之,Symbol和String在Ruby中有不同的用途和性質。選擇使用哪種取決於需求,如果需要一個不可變且唯一的標識符,那麼Symbol是更好的選擇,如果你需要處理文本和字符數據,那麼String更適合。