如何获取调用方法的参数列表

时间:2011-06-01 21:18:17

标签: ruby-on-rails ruby

如何获取传递给方法的参数列表,最好是我可以迭代的参数?

例如

def foo(a,b,c)
  puts args.inspect
end

foo(1,2,3)
=> [1,2,3]

? 谢谢!

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]等。