溅上哈希
-
哈希上的splat将其转换为数组。
[*{foo: :bar}] # => [[:foo, :bar]]
是否有一些隐藏的机制(如隐式类转换)在这里,或者它是一个内置的原始function?
-
除了一个数组,在Ruby 1.9下使用splat运算符消失/改变的唯一内容是
nil
和hash吗?
splat将尝试将对象显式转换为Array。
为此,它将发送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
(Ruby 2.0) -
Set
和SortedSet
Set
-
- (附加课程)
-
NilClass
-
MatchData
-
OpenStruct
-
Struct
-
Time
-
Matrix
和Vector
-
因此,所有这些都可以被喷溅:
match, group, next_group = *"Hello, world".match(/(.*), (.*)/) group # => "Hello"