5
fruit = ["apple","red","banana","yellow"]
=> ["apple", "red", "banana", "yellow"]

Hash[*fruit]    
=> {"apple"=>"red", "banana"=>"yellow"}

スプラットが配列をハッシュに非常にきれいに解析するのはなぜですか?

または、より正確には、ハッシュは「リンゴ」がキーであり、「赤」がそれに対応する値であることをどのように「認識」しますか?

それは単にそれらが果物の配列の連続した位置にあるからですか?

ここでスプラットを使用することは重要ですか?ハッシュは、他の方法で直接、アリーから自分自身を定義することはできませんか?

4

2 に答える 2

10

ドキュメントに記載されているように:

Hash["a", 100, "b", 200]       #=> {"a"=>100, "b"=>200}
Hash["a" => 100, "b" => 200]   #=> {"a"=>100, "b"=>200}
{ "a" => 100, "b" => 200 }     #=> {"a"=>100, "b"=>200}

ドキュメントに従って配列をメソッドに渡すことはできませんHash[]。したがって、splatは配列を分解し、その要素を通常の引数としてメソッドに渡す方法にすぎませfruitHash[]。実際、これはスプラット演算子の非常に一般的な使用法です。

クールなことは、Hashに奇数の引数を渡そうとすると、ArgumentError例外が発生することです。

fruit = ["apple","red","banana","yellow","orange"]
#=> ["apple", "red", "banana", "yellow", "orange"]
Hash[*fruit] #=> ArgumentError: odd number of arguments for Hash
于 2009-09-22T04:37:15.107 に答える
2

[]クラスHashのパブリッククラスメソッドを見てください。(ここで言ってください。)これは、新しいハッシュ(インスタンス)が作成され、指定されたオブジェクトが入力されることを明確に示しています。当然、それらはペアで発生します。splat演算子は、パラメーターとして使用される場合、基本的に配列を展開します。

于 2009-09-22T04:37:47.430 に答える