2

我知道我可以使用 splat 运算符来传递多个参数并在方法内访问它们。

def meth(arg*)
  print arg
end
meth(1,2,'string') #=> [1,2,"string"]

splat但是 Ruby 在创建仅使用运算符作为参数的方法时不会抱怨。例如,这个方法定义不会抛出任何错误,所以我认为它是有效的。但是如何访问传递的参数?

def meth(*)
  #how do I access the parameters passed here.  
  # puts * is obviously invalid
end
4

3 回答 3

2

*是为了接受不使用的可变数量的参数。用于接受未使用的_单个参数,但有区别。虽然由 接收的第一个参数_可以由 引用,但不能引用由_接收的参数*

def foo _, x, _; puts _ end
foo(1, 2, 3) # => 1

def foo *; puts * end # => syntax error

因此,虽然使用首字母_是接收不被使用的参数的惯例,但使用次要_*阻止接收的参数被使用。

于 2013-09-08T21:10:40.847 回答
2

有趣的问题,一个刚刚出现在我本周阅读的一篇文章中。看到这个,包括最后的评论。看:

奇怪的 Ruby Splat

单独使用它不允许访问变量,但它可以保护您免受意外输入的影响。

于 2013-09-08T20:04:57.247 回答
0

作为我在上面评论中的猜测的一个例子:

def abc( a, b, * )
  puts a
  puts b
end
# => nil
abc( 1,2,3,4,5,6 )
1
2
# => nil
于 2013-09-08T19:58:59.607 回答