From: "Eregon (Benoit Daloze)" Date: 2022-03-04T12:57:25+00:00 Subject: [ruby-core:107776] [Ruby master Misc#18609] keyword decomposition in enumerable (question/guidance) Issue #18609 has been updated by Eregon (Benoit Daloze). To clarify the example does not pass keyword arguments to a block (same for a method) requiring keyword arguments, that's always going to fail -- by design -- on Ruby 3+. ---------------------------------------- Misc #18609: keyword decomposition in enumerable (question/guidance) https://bugs.ruby-lang.org/issues/18609#change-96697 * Author: Ethan (Ethan -) * Status: Closed * Priority: Normal ---------------------------------------- There is a pattern that I have used somewhat often in ruby 2, decomposing hash keys as keyword arguments to blocks for Enumerable, which no longer works in ruby 3. I'm wondering if there is a better way that I am missing (I couldn't find any discussion of this particular thing searching this tracker). ```ruby drafts = [ {name: 'draft4', mod: :Draft04, image: 'draft4.png'}, {name: 'draft6', mod: :Draft06, image: 'draft6.jpg'}, ] # ruby 2 drafts.each do |name: , mod: , image: | ... # ruby 3 drafts.each do |draft| name = draft[:name] mod = draft[:mod] image = draft[:image] ... ``` the latter is much more cumbersome, but seems necessary with the switch in keyword argument handling in ruby 3. I can refactor to `name, mod, image = draft[:name], draft[:mod], draft[:image]`. that is a little better but still more verbose and repetitive than it used to be, and with more keys the line gets very long. I am expecting this pattern is just a casualty of the keyword split that I will have to rewrite and this issue can be closed, but hoping there may be some better option I have missed. -- https://bugs.ruby-lang.org/ Unsubscribe: