我正在编写一个脚本,它将几个参数传递给一组pg查询。其中一些查询采用2个日期参数,有些只采用1.我想知道查询是否有办法忽略传递给它的任何“额外”日期参数。
E.g。此命令针对DailyQueries中的每个查询运行:
DailyQueries.send(query_name, conn, date_1, date_2)
我有一些结构如下的查询:
DailyQueries.tot_students(conn, date)
而其他人则为:
DailyQueries.fact_practice_tot_sessions(conn, start_date, end_date)
理想情况下,即使传递了2个日期参数,前者仍会运行。现在我收到此错误:
wrong number of arguments (3 for 2) (ArgumentError)
答案 0 :(得分:1)
def zoo(*args)
puts args.inspect
end
你可以根据你的期望来检查args的数量并接受或拒绝来电。
irb(main):001:0> def zoo(*args)
irb(main):002:1> puts args.inspect
irb(main):003:1> end
=> nil
irb(main):004:0> zoo
[]
=> nil
irb(main):005:0> zoo 1
[1]
=> nil
irb(main):006:0> zoo 1,2,3,4,5
[1, 2, 3, 4, 5]
另请看一下: http://ruby-doc.org/core-2.2.0/Method.html#method-i-arity和 http://ruby-doc.org/core-2.2.0/Method.html#method-i-curry
如果你不直接控制代码:你可以编写一个包装,检查arrity并发送正确数量的args,或者如果你感到幸运,你可以尝试将方法修改为支持这种行为。