ハッシュの感嘆符は、それを配列に変換します。
[*{foo: :bar}] # => [[:foo, :bar]]
ここで何らかの隠しメカニズム (暗黙のクラス キャストなど) が行われているのでしょうか、それとも組み込みのプリミティブ機能ですか?
配列のほかに、
nil
Ruby 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
)Array
Hash
Range
IO
とFile
Enumerator
Enumerator::Lazy
(ルビー2.0)Set
とSortedSet
- (追加クラス)
NilClass
MatchData
OpenStruct
Struct
Time
Matrix
とVector
したがって、これらすべてを飛び散らせることができます。
match, group, next_group = *"Hello, world".match(/(.*), (.*)/)
group # => "Hello"
于 2013-01-14T01:45:32.777 に答える