如何访问仅使用splat运算符发送的参数

时间:2013-09-08 19:46:27

标签: ruby

我知道我可以使用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

3 个答案:

答案 0 :(得分:2)

有趣的问题,以及本周我读过的一篇文章中提到的问题。看到这一点,包括最后的评论。参见:

The strange Ruby Splat

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

答案 1 :(得分:2)

*用于接受不使用的可变数量的参数。 _用于接受未使用的单个参数,但存在差异。虽然_可以引用_收到的第一个参数,但*收到的参数不能被引用。

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

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

因此,虽然使用初始_是接收不使用的参数的约定,但使用辅助_*可防止接收到的参数使用

答案 2 :(得分:0)

作为我在上述评论中推测的一个例子:

def abc( a, b, * )
  puts a
  puts b
end
# => nil
abc( 1,2,3,4,5,6 )
1
2
# => nil