
Issue #20164 has been updated by palkan (Vladimir Dementyev). +1 for making exceptions pattern-matching friendly. The example above demonstrates the use case pretty well (class + message matching). The question is what keys must be supported for each standard exception class? The plain Ruby implementation could be as follows: ```ruby class Exception # Not sure if we need to take into account the `keys` argument def deconstruct_keys(*) = {message:, cause:} end class NameError def deconstruct_keys(*) = super.merge(name:) end ``` ---------------------------------------- Feature #20164: Add Exception#deconstruct_keys https://bugs.ruby-lang.org/issues/20164#change-106167 * Author: Dan0042 (Daniel DeLorme) * Status: Open * Priority: Normal ---------------------------------------- It would be convenient to perform pattern matching with exception classes. So `Exception#deconstruct_keys` should return a hash with `:message` (original_message) as well as any other keys specific to the exception subclass. Examples: ``` begin #code rescue => err case err in StandardError(message: /Permission denied/) abort "please select a different file" in NameError(name: :foo) retry if require "foo_helper else raise end end ``` -- https://bugs.ruby-lang.org/