清除参数过多的 up/shorten 方法并仍然强制执行 strict/non-missing 参数的最佳方法

Best way to clean up/shorten method with too many params & still enforce strict/non-missing params

我目前有一个方法有很多我想缩短的严格参数:

build_receipt(order_id:, order_rate:, ..... invoice_id:, invoice_date:...)
.
.

我正在考虑将它们分组到散列中,如下所示:

build_receipt(order_details: {}, invoice_details: {})

有谁知道我可以做上述事情的明智方法,同时在缺少参数时仍然抛出错误,而无需明确地逐行为上述哈希中的每个键编写验证(或者如果有更好的上面的方法可以缩短)?

您可以从那里继续并计算传入的键数,并且没有缺失值:

def build_receipt(order_details={}, invoice_details={})
  return if order_details.merge(invoice_details).keys.count != 5 or order_details.merge(invoice_details).values.any?{|v| v.nil? }
  #do something
end