ruby – 啪啪啪啪啪

>哈希上的splat将其转换为数组.

[* {foo :: bar}]#=> [[:foo,:bar]]

是否有一些隐藏的机制(如隐式类转换)在这里,或者它是一个内置的原始功能?
>除了数组之外,在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)

>数组
>哈希
>范围
> IO和文件
>普查员
>枚举器::懒惰(Ruby 2.0)
> Set and SortedSet

>(附加课程)

> NilClass
> MatchData
> OpenStruct
>结构
>时间
>矩阵和矢量

因此,所有这些都可以被喷溅:

match,group,next_group = *"Hello,world".match(/(.*),(.*)/)
group # => "Hello"

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...