From: nagachika00@... Date: 2020-07-26T09:00:00+00:00 Subject: [ruby-core:99345] [Ruby master Bug#16801] The default Struct constructor improperly handle keyword arguments Issue #16801 has been updated by nagachika (Tomoyuki Chikanaga). Backport changed from 2.5: DONTNEED, 2.6: DONTNEED, 2.7: REQUIRED to 2.5: DONTNEED, 2.6: DONTNEED, 2.7: DONE ruby_2_7 61c6d433060881e952140d2154c06f8c9803dc8a. ---------------------------------------- Bug #16801: The default Struct constructor improperly handle keyword arguments https://bugs.ruby-lang.org/issues/16801#change-86739 * Author: byroot (Jean Boussier) * Status: Closed * Priority: Normal * ruby -v: ruby 2.7.1p83 * Backport: 2.5: DONTNEED, 2.6: DONTNEED, 2.7: DONE ---------------------------------------- Reproduction script: ```ruby Field = Struct.new(:value) do def initialize(value, keyword: false) super(value) @keyword = keyword end end Field.new(1, keyword: true) ``` ``` /tmp/kw.rb:8: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call /tmp/kw.rb:2: warning: The called method `initialize' is defined here ``` This can be worked around with `keyword_init: true`, but I see no reason why `Struct` couldn't properly handle keyword arguments in it's default constructor. I have a patch for this: https://github.com/ruby/ruby/pull/3045 however I had to modify a test that was explicitly expecting that warning, so maybe I'm missing something. -- https://bugs.ruby-lang.org/ Unsubscribe: