*::(星号双冒号)在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(),将数组元素传递给它的yearmonmday参数。

*:: 运算符之间缺少空格使其混乱。 :-\

【讨论】:

第一个要点应该说“在全局范围内”。当前范围将没有:: 这是一个很好的例子,为什么有时使用局部变量是个好主意。

以上是关于*::(星号双冒号)在Ruby中做了啥?的主要内容,如果未能解决你的问题,请参考以下文章

(一元)* 运算符在这段 Ruby 代码中做了啥?

~~(“双波浪号”)在 Javascript 中做了啥?

##(双哈希)在预处理器指令中做了啥?

`:_*`(冒号下划线星号)在 Scala 中有啥作用?

假定大小的数组:冒号与星号 - DIMENSION(:) arr 与 arr(*)

@: (在符号冒号处)在 Makefile 中是啥意思?