如何获取传递给方法的参数列表,最好是我可以迭代的参数?
例如
def foo(a,b,c)
puts args.inspect
end
foo(1,2,3)
=> [1,2,3]
? 谢谢!
答案 0 :(得分:3)
如果按照指定定义方法,则总是有3个args,或者方法调用无效。所以“所有的args”已经为你定义了。所以你只需将方法更改为:
def foo(a,b,c)
[a, b, c]
end
要定义一个可以使用任何args调用的方法(然后访问那些args),你可以这样做:
def foo(*args)
args
end
*
所做的是将该点之后的所有args放入数组中。
答案 1 :(得分:3)
您始终可以定义一个采用任意数量参数的方法:
def foo(*args)
puts args.inspect
end
这完全符合您的要求,但仅适用于以这种方式定义的方法。
*args
表示法在此上下文中表示“零个或多个参数”。与此相反的是splat运算符,它将它们扩展回列表,对调用其他方法很有用。
注意,*
- 可选参数必须在参数列表中排在最后。
答案 2 :(得分:2)
正如其他人指出的那样,您可以使用splat运算符(*
)来实现您想要的效果。如果您不喜欢这样,您可以使用Ruby方法可以使用更好的语法将哈希作为最后一个参数。
def foo(args)
raise ArgumentError if args.keys.any? { |arg| arg.nil? || !arg.kind_of?(Integer) }
end
puts foo(:a => 1, :b => 2, :c => "a") # raise an ArgumentError
要访问方法内的参数,您必须使用args[:a]
等。