-
哈希上的 splat 将其转换为数组。
[*{foo: :bar}] # => [[:foo, :bar]]
这里是否存在一些隐藏机制(例如隐式类转换),或者它是内置的原始功能?
除了数组之外,还有nil
并哈希唯一在 Ruby 1.9 下使用 splat 运算符消失/改变的东西?
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
。尤其:
- (because they include
Enumerable
)
Array
Hash
Range
-
IO
and File
Enumerator
-
Enumerator::Lazy
(红宝石2.0)
-
Set
and SortedSet
- (additional classes)
NilClass
MatchData
OpenStruct
Struct
Time
-
Matrix
and Vector
所有这些都可以这样说:
match, group, next_group = *"Hello, world".match(/(.*), (.*)/)
group # => "Hello"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)