符號
在字串上使用符號的優點:
1. Ruby 符號是一個 O(1)
比較的物件
要比較兩個字串,我們可能需要檢視每個字元。對於長度為 N 的兩個字串,這將需要 N + 1 個比較
def string_compare str1, str2
if str1.length != str2.length
return false
end
for i in 0...str1.length
return false if str1[i] != str2[i]
end
return true
end
string_compare "foobar", "foobar"
但由於 foobar 的每個外觀都指向同一個物件,我們可以通過檢視物件 ID 來比較符號。我們可以通過一次比較來做到這一點。(O(1)
)
def symbol_compare sym1, sym2
sym1.object_id == sym2.object_id
end
symbol_compare :foobar, :foobar
2. Ruby 符號是自由形式列舉中的標籤
在 C++中,我們可以使用列舉來表示相關常量的族:
enum BugStatus { OPEN, CLOSED };
BugStatus original_status = OPEN;
BugStatus current_status = CLOSED;
但由於 Ruby 是一種動態語言,我們不擔心宣告 BugStatus 型別或跟蹤合法值。相反,我們將列舉值表示為符號:
original_status = :open
current_status = :closed
Ruby 符號是一個不變的唯一名稱
在 Ruby 中,我們可以更改字串的內容:
"foobar"[0] = ?b # "boo"
但我們無法改變符號的內容:
:foobar[0] = ?b # Raises an error
4. Ruby 符號是關鍵字引數的關鍵字
將關鍵字引數傳遞給 Ruby 函式時,我們使用符號指定關鍵字:
# Build a URL for 'bug' using Rails.
url_for :controller => 'bug',
:action => 'show',
:id => bug.id
5. Ruby 符號是雜湊鍵的最佳選擇
通常,我們將使用符號來表示雜湊表的鍵:
options = {}
options[:auto_save] = true
options[:show_comments] = false