哈希上的splat将其转换为数组。
[*{foo: :bar}] # => [[:foo, :bar]]
这里有一些隐藏机制(例如隐式类强制转换),还是内置的原始功能?
除了数组之外,还有nil
和散列在Ruby 1.9下使用splat运算符消失/改变的唯一内容吗?
答案 0 :(得分:12)
splat将尝试将对象显式转换为数组。
要执行此操作,它会发送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
NilClass
MatchData
OpenStruct
Struct
Time
Matrix
和Vector
因此所有这些都可以迸发出来:
match, group, next_group = *"Hello, world".match(/(.*), (.*)/)
group # => "Hello"