2

これまでにハッシュを作成する方法は次のとおりです(Codecademyごと)

my_hash = {
  "pay" => "low",
  "vacation" => "yes",
  "parking" => "no"
}

そして、ハッシュを作成する ruby​​monk の新しい便利な方法を次に示します。

chuck_norris = Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]

2 番目の手法のコロンは構文の一部ですか、それとも文字列の一部ですか? また、それらが文字列の一部にすぎない場合、文字列を引用符で囲まないのはなぜですか?

4

2 に答える 2

0

2 番目の手法のコロンは構文の一部ですか、それとも文字列の一部ですか? また、それらが文字列の一部にすぎない場合、文字列を引用符で囲まないのはなぜですか?

Rubydoc を見ると、Hash::[]メソッドには 3 つの形式があることがわかります。

Hash[ key, value, ... ] → new_hash
Hash[ [ [key, value], ... ] ] → new_hash
Hash[ object ] → new_hash

あなたの特定の例は、オブジェクトのリストがキーと値のペアとして解釈される最初のケースのインスタンスです。だから呼び出す:

Hash[a, b, c, d, e, f]

ペアになります:

  • a => b
  • c => d
  • e => f

SO のいくつかのトピックを簡単に確認:できる構文に混乱していると思います。要約すると、この場合、 はオブジェクトを構築します。:Symbol

結論は:

Hash[:punch, 99, :kick, 98, :stops_bullets_with_hands, true]

次のハッシュとして表すことができます。

{
    :punch => 99,
    :kick => 98,
    :stops_bullets_with_hands => true
}

ここで:punch:kick:stops_bullets_with_handsは記号 と9998およびtrue対応する値です。

Hash#[]値を返すには、次のようなメソッドを使用できます。

chuck_norris[:punch] # 99
chuck_norris[:kick] # 98
chuck_norris[:stops_bullets_with_hands] # true

#to_sメソッドを介してシンボルを文字列に変換できることに注意してください。

:punch.to_s # "punch"
:kick.to_s # "kick"
:stops_bullets_with_hands.to_s # "stops_bullets_with_hands"
于 2013-07-28T17:48:49.413 に答える