From: ko1@... Date: 2014-10-23T02:56:51+00:00 Subject: [ruby-core:65865] [ruby-trunk - Bug #10413] Unexpected block invocation with unknown keywords Issue #10413 has been updated by Koichi Sasada. Nobu also proposed that (1) export rb_hash_delete_key() (2) and obsolete rb_hash_delete() (show warning) This approach is very compatible way. My idea (change the specification rb_hash_delete()) has advantage that this helps rb_hash_delete() users who don't expect invoking block. However, it has disadvantage who expect invoking block. ---------------------------------------- Bug #10413: Unexpected block invocation with unknown keywords https://bugs.ruby-lang.org/issues/10413#change-49599 * Author: Koichi Sasada * Status: Open * Priority: Normal * Assignee: Koichi Sasada * Category: core * Target version: current: 2.2.0 * ruby -v: 2.2dev * Backport: 2.0.0: REQUIRED, 2.1: REQUIRED ---------------------------------------- When unknown keywords are passed, unexpected block is invoked. ```ruby def bar(k2: 'v2') end def foo bar(k1: 1) end foo(){ puts caller_locations raise "unreachable" } ``` current behavior: ``` ruby 2.2.0dev (2014-10-22 trunk 48083) [i386-mswin32_110] test.rb:10:in `block in
': unreachable (RuntimeError) from test.rb:5:in `foo' from test.rb:8:in `
' test.rb:5:in `foo' test.rb:8:in `
' ``` expected: ``` ../../gitruby/test.rb:5:in `foo': unknown keyword: k1 (ArgumentError) from ../../gitruby/test.rb:8:in `
' ``` This strange behavior is because "unknown_keyword_error" in class.c calls rb_hash_delete() (Hash#delete) with :k1 and invoke passed block. I'm now re-writing all of this part and my branch does not have this problem. However, Ruby 2.0 and 2.1 have same problem. -- https://bugs.ruby-lang.org/