红宝石:“p *1..10”中的星号是啥意思

Posted

技术标签:

【中文标题】红宝石:“p *1..10”中的星号是啥意思【英文标题】:ruby: what does the asterisk in "p *1..10" mean红宝石:“p *1..10”中的星号是什么意思 【发布时间】:2010-12-16 07:15:56 【问题描述】:

线

p *1..10

完全一样
(1..10).each  |x| puts x 

它为您提供以下输出:

$ ruby -e "p *1..10"
1
2
3
4
5
6
7
8
9
10

例如,在使用 textmate 时,这是一个很好的快捷方式,但星号有什么作用?这是如何运作的?在网上找不到任何东西...

【问题讨论】:

【参考方案1】:

这是splat operator。您会经常看到它用于将数组拆分为函数的参数。

def my_function(param1, param2, param3)
  param1 + param2 + param3
end

my_values = [2, 3, 5]

my_function(*my_values) # returns 10

更常见的是它用于接受任意数量的参数

def my_other_function(to_add, *other_args)
  other_args.map  |arg| arg + to_add 
end

my_other_function(1, 6, 7, 8) # returns [7, 8, 9]

它也适用于多重赋值(尽管这两个语句都可以在没有 splat 的情况下工作):

first, second, third = *my_values
*my_new_array = 7, 11, 13

对于你的例子,这两个是等价的:

p *1..10
p 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

【讨论】:

在我看来,a, b, c = *myvalues 等价于 a, b, c = myvalues 还是在这种情况下使用 splat 运算符隐式使用 ruby​​? @Patrick 是的,一侧有一个对象而另一侧有多个对象的赋值将暗示一个 splat 运算符。所以我猜这不是一个非常有用的例子。

以上是关于红宝石:“p *1..10”中的星号是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 中的 *(星号)是啥意思? [复制]

`reveal_type` 输出中的星号是啥意思?

scanf 格式说明符中的星号是啥意思? [复制]

Android Studio 的版本控制“日志”窗口中的 Author_name*(带星号)是啥意思?

proguard 规则中的双星号是啥意思?

“:foo”在红宝石中是啥意思[重复]