From: marcandre-ruby-core@... Date: 2020-12-19T15:18:14+00:00 Subject: [ruby-core:101541] [Ruby master Feature#17406] Add `NoMatchingPatternError#depth` Issue #17406 has been updated by marcandre (Marc-Andre Lafortune). Eregon (Benoit Daloze) wrote in #note-1: > How would this work? > Mutating a field of the NoMatchingPatternError in a catch(NoMatchingPatternError) inserted in every `in` and `else`? I think of it as a catch in each `case-in`, but the effect is the same. > Seems rather hacky to me. Possibly ����. Actual downside? ---------------------------------------- Feature #17406: Add `NoMatchingPatternError#depth` https://bugs.ruby-lang.org/issues/17406#change-89323 * Author: marcandre (Marc-Andre Lafortune) * Status: Open * Priority: Normal ---------------------------------------- Could we have `NoMatchingPatternError#depth`, returning the number of `case...in...end` an exception has traversed? ```ruby def show_depth yield rescue NoMatchingPatternError => e puts "Depth: #{e.depth}" raise end show_depth do case [1,2,3] in [x, y, z] then show_depth do x => [a, b] # => raises NoMatchingPatternError end end end # Prints "Depth: 0" then "Depth: 1" ``` This could help bring pattern match closer to a language construct people can play with. Example usecase: implement `Ractor#receive_if` as in https://bugs.ruby-lang.org/issues/17378#note-6 -- https://bugs.ruby-lang.org/ Unsubscribe: