From: shevegen@... Date: 2019-12-28T13:15:40+00:00 Subject: [ruby-core:96549] [Ruby master Misc#16464] Which core objects should support deconstruct/deconstruct_keys? Issue #16464 has been updated by shevegen (Robert A. Heiler). I think when possible every object should support deconstructing IF it makes sense. If it walks like a duck, talks like a duck, then it can be dequacked (deconstructed like a duck). I guess one question may be how useful something it is, whether there is an actual use case or not - people to use that. Perhaps it may be better to see and wait for (several) people who really had a use case to do so and evaluate again in a few months. 1 in Integer(..0) "I believe the latter example looks pretty logical " To me this looks very, very, very strange. Is that still ruby at all? :P I guess it follows from a logical continuation, e. g. " if x in y" works, and "beginless ranges" work, then the above should work too. But the syntax is so strange - I wonder if I am the only one feeling about that so if that is the case I'll happily quiet down. But to my eyes it looks very strange. ---------------------------------------- Misc #16464: Which core objects should support deconstruct/deconstruct_keys? https://bugs.ruby-lang.org/issues/16464#change-83478 * Author: zverok (Victor Shepelev) * Status: Open * Priority: Normal * Assignee: ---------------------------------------- Now, when pattern matching is out, I believe it is worth discussing which core and standard library objects should be matchable "out of the box". My proposals, as of now, are: **1. `Object#deconstruct`, returning `[self]`.** Justification: ```ruby # this works: 1 in Integer # this works: 1 in ..0 # this does NOT: 1 in Integer(..0) # NoMatchingPatternError (1) ``` I believe the latter example looks pretty logical (and can be used in some flexible methods like "if it is a positive integer, it is index in the array, if it is negative integer, it is backward index, and if it is float, it should be calculated as a mean of nearby elements") **2. `Time#deconstruct_keys`** Justification is obvious: ```ruby case created_at when year: 2019, month: 11..12 => m, day: p "Created at #{day}.#{m} this year" else # ... end ``` (Probably the same for `Date` and `DateTime`) **3. `Set#deconstruct`** Seems "logical" as set is a sequence, but I can't think of a good realistic example :) -- https://bugs.ruby-lang.org/ Unsubscribe: