From: "Hanmac (Hans Mackowiak)" Date: 2022-03-04T13:30:47+00:00 Subject: [ruby-core:107778] [Ruby master Misc#18609] keyword decomposition in enumerable (question/guidance) Issue #18609 has been updated by Hanmac (Hans Mackowiak). Eregon (Benoit Daloze) wrote in #note-5: > Hanmac (Hans Mackowiak) wrote in #note-3: > > interesting, it seems to be changed in between "3.1.0" and "3.1.1" > > This is not true, AFAIK this behavior on purpose since Ruby 3.0.0. > Also please don't claim something like that without a concrete example and result. I was testing this on https://try.ruby-lang.org/ because i don't have more ruby versions installed right now, and this did work: ``` ruby p RUBY_VERSION drafts = [ {name: 'draft4', mod: :Draft04, image: 'draft4.png'}, {name: 'draft6', mod: :Draft06, image: 'draft6.jpg'}, ] drafts.each do |name: , mod: , image: | p [name, mod, image] end ``` results in: ``` "3.1.0" ["draft4", "Draft04", "draft4.png"] ["draft6", "Draft06", "draft6.jpg"] ``` ---------------------------------------- Misc #18609: keyword decomposition in enumerable (question/guidance) https://bugs.ruby-lang.org/issues/18609#change-96699 * 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: