From: alxtskrnk@... Date: 2015-06-12T16:45:11+00:00 Subject: [ruby-core:69558] [Ruby trunk - Bug #11048] blocks raise on missing and extra keyword args Issue #11048 has been updated by bug hit. Yukihiro Matsumoto wrote: > so if you have any real-world use case that require keyword argument tolerance, just tell me. The way I discovered this, as far as I remember, is: I encountered a method I needed to call that yielded keyword args In my case I only cared about one arg so I passed a block taking one keyarg, expecting it to just quietly drop the others as with positional args Instead it raised ---------------------------------------- Bug #11048: blocks raise on missing and extra keyword args https://bugs.ruby-lang.org/issues/11048#change-52892 * Author: bug hit * Status: Open * Priority: Normal * Assignee: Yukihiro Matsumoto * ruby -v: ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- blocks intentionally tolerate arity mismatches ``` irb(main):001:0> proc{|a, b| [a, b]}.(1) [ [0] 1, [1] nil ] irb(main):003:0> proc{|a, b|[a, b]}.(1, 2, 3) [ [0] 1, [1] 2 ] ``` so why not missing keyword args? ``` irb(main):002:0> proc{|a:, b:|[a, b]}.(a: 1) ArgumentError: missing keyword: b irb(main):004:0> proc{|a:, b:|[a, b]}.(a: 1, b: 1, c: 1) ArgumentError: unknown keyword: c ``` -- https://bugs.ruby-lang.org/