ruby: "p *1..10"中的星号是什么意思

标签 ruby operators range

线

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 时这是一个很好的快捷方式,但是星号有什么作用?这是如何运作的?在网上找不到任何东西...

最佳答案

这是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

关于ruby: "p *1..10"中的星号是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1729284/

相关文章:

ruby 正则表达式,除了括号和方括号中的所有内容

ruby-on-rails - Resque - 类的未定义方法 'perform'

c++ - 可以在重载运算符中使用访问器方法吗?

ruby-on-rails - rails 5 : How do I reference I18n translations from another yaml config file?

ruby - remote_file Chef 资源默认是幂等的吗?

swift - 为什么 Swift 的三元运算符对空格如此挑剔?

javascript - 比较操作 - 正确的语法?

ruby - 如何检查 ruby​​ 中的 2 个范围是否以任何方式相交?

linux - 如何比较bash中的2个范围列表?

javascript - 如何使用正则表达式来表示 18-99 之间的整数范围?