ハッシュの感嘆符は、それを配列に変換します。
[*{foo: :bar}] # => [[:foo, :bar]]ここで何らかの隠しメカニズム (暗黙のクラス キャストなど) が行われているのでしょうか、それとも組み込みのプリミティブ機能ですか?
配列のほかに、
nilRuby 1.9 で splat 演算子で消えたり変更されたりするのはハッシュだけですか?
4657 次
1 に答える
14
スプラットは、オブジェクトから配列への明示的な変換を試みます。
これを行うために、結果としてを送信to_aして期待しArrayます。
class Foo
def to_a
[1,2,3]
end
end
a, b, c = *Foo.new
a # => 1
オブジェクトがに応答しない場合、to_a効果はありません。[*42] == [42]
多くの組み込みクラスはを実装しto_aます。特に:
- (含まれているため
Enumerable)ArrayHashRangeIOとFileEnumeratorEnumerator::Lazy(ルビー2.0)SetとSortedSet
- (追加クラス)
NilClassMatchDataOpenStructStructTimeMatrixとVector
したがって、これらすべてを飛び散らせることができます。
match, group, next_group = *"Hello, world".match(/(.*), (.*)/)
group # => "Hello"
于 2013-01-14T01:45:32.777 に答える