2012-06-22 101 views
0

我正在讀關於符號的一些例子,紅寶石,和一個例子是用符號來代表一個國家的名稱,例如:Montana紅寶石成語的分組符號

但是,從Java的到來,我通常會在這裏使用枚舉。我喜歡枚舉的是,你可以將它們,所以我可以這樣做:

枚舉國{ 蒙大拿州,明尼蘇達州,... }

然後在Java代碼中我可以調用

States.Montana 

有沒有一種合乎邏輯的方法來在ruby中對相關符號進行分組?創建一個包含符號的模塊是否有意義?還是有更習慣的方式來做到這一點在紅寶石?

回答

3

你可能會想爲此使用模塊。

module States 
    MN = "Minnesota" 
    WI = "Wisconsin" 
end 

puts States::MN #=> "Minnesota" 

論紅寶石一個方面說明,「符號」通常是指其中Symbol class是有點像一個實習字符串。你寫了一個像:my_symbol這樣的符號。它們通常用作HashMap s *中的鍵。

*應該是Hash而不是HashMap

+2

你讓你的語言混了?我想你的意思是說「他們經常被用作'哈希'中的鍵。 –

+0

我確實做到了!謝謝! – nickgroenke

+0

感謝您的解釋! –

0

這樣做的慣用方法是使用原始符號。只需傳遞名稱的符號,使用downcase就可以實現一些靈活性(可選),並根據有效符號列表驗證符號(可選)。

1

我最好使用符號或字符串數​​組:

states = [:Montana, :Minnesota, ...] 

states.each { |s| puts s } # print one state each line 
puts *states     # another way to do the same 

對於例子值得說puts轉換參數(一個或多個)轉換成字符串(一個或多個);所以你可以安全地使用它的符號。如果你不打算展示或操縱它們,我認爲這些符號更有用;否則你可能想使用字符串。

,其中的符號是有用的一個例子是用於索引一個Hash

states = { :montana => 'beautiful', :minnesota => 'wonderful', ... } 
puts states[:washington]