*::(星号双冒号)在Ruby中做了啥?
Posted
技术标签:
【中文标题】*::(星号双冒号)在Ruby中做了啥?【英文标题】:What does *:: (asterisk double colon) do in Ruby?*::(星号双冒号)在Ruby中做了什么? 【发布时间】:2012-12-20 17:00:25 【问题描述】:我今天在浏览 Rails 代码时偶然发现了this snippet:
new_date(*::Date._parse(string, false).values_at(:year, :mon, :mday))
*::Date
中的星号-双冒号(或 splat-双冒号)有什么作用?
可能它与一个特别命名空间的Date
类的范围有关......但作者有必要包含它而不是仅仅使用标准的Date
类。
【问题讨论】:
【参考方案1】:我读错了代码;它根本不是“*::”运算符。
这是发生了什么:
在全局范围内查找Date
类 (::Date
)
调用_parse()
获取值的哈希
调用values_at
将哈希转换为数组
在将数组转换为方法调用的多个参数的典型功能中使用星号运算符
调用new_date()
,将数组元素传递给它的year
、mon
和mday
参数。
*
和 ::
运算符之间缺少空格使其混乱。 :-\
【讨论】:
第一个要点应该说“在全局范围内”。当前范围将没有::
。
这是一个很好的例子,为什么有时使用局部变量是个好主意。以上是关于*::(星号双冒号)在Ruby中做了啥?的主要内容,如果未能解决你的问题,请参考以下文章