From: merch-redmine@... Date: 2020-04-20T14:56:26+00:00 Subject: [ruby-core:97980] [Ruby master Bug#16801] The default Struct constructor improperly handle keyword arguments Issue #16801 has been updated by jeremyevans0 (Jeremy Evans). Backport set to 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ruby -v set to ruby 2.7.1p83 Tracker changed from Feature to Bug byroot (Jean Boussier) wrote in #note-3: > To clarify, what I'm trying to say is that the `"new"` method should simply forward everything to the `initialize` method no matter what. I can't see any reason for `Struct#new` to have arbitrary restrictions. Sorry about misunderstanding. Your clarification makes a lot more sense. It seems reasonable that `keyword_init` would only affect `#initialize` and not `.new`. ---------------------------------------- Bug #16801: The default Struct constructor improperly handle keyword arguments https://bugs.ruby-lang.org/issues/16801#change-85209 * Author: byroot (Jean Boussier) * Status: Open * Priority: Normal * ruby -v: ruby 2.7.1p83 * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- 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: