0

私はルビーのシンボルに関するいくつかの例を読んでいました、そして1つの例は州名を表すためにシンボルを使用していました、例えば:Montana

ただし、Javaから来ているので、ここでは通常列挙型を使用します。列挙型について私が気に入っているのは、列挙型をグループ化できることです。そのため、次のようなことができます。

列挙型の状態{モンタナ、ミネソタ、...}

そして、Javaコードで私は呼び出すことができます

States.Montana

ルビーで関連するシンボルをグループ化する論理的な方法はありますか?シンボルを含むモジュールを作成することは意味がありますか?または、ルビーでこれを行うためのより慣用的な方法はありますか?

4

3 に答える 3

3

このためにモジュールを使用することをお勧めします。

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

puts States::MN #=> "Minnesota"

ちなみに、Rubyの「シンボル」は通常、インターン文字列のようなシンボルクラスを指します。のような記号を書きます:my_symbol。これらは、HashMaps*のキーとしてよく使用されます。

*してはいけませHashHashMap

于 2012-06-22T23:16:54.587 に答える
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]
于 2012-06-22T23:40:00.420 に答える
0

これを行う慣用的な方法は、生のシンボルを使用することです。名前のシンボルを渡すだけで、downcaseある程度の柔軟性を持たせるために使用し(オプション)、有効なシンボルのリストに対してシンボルを検証します(オプション)。

于 2012-06-22T23:11:21.243 に答える