From: matz@... Date: 2018-07-18T07:33:10+00:00 Subject: [ruby-core:87984] [Ruby trunk Feature#14913][Closed] Extend case to match several values at once Issue #14913 has been updated by matz (Yukihiro Matsumoto). Status changed from Open to Closed We will discuss the pattern matching in #14912. Matz. ---------------------------------------- Feature #14913: Extend case to match several values at once https://bugs.ruby-lang.org/issues/14913#change-72995 * Author: zverok (Victor Shepelev) * Status: Closed * Priority: Normal * Assignee: * Target version: ---------------------------------------- This proposal is part of the search for how pattern matching or its elements could be gently introduced to Ruby. [This blog post](https://zverok.github.io/blog/2018-06-26-pattern-matching.html) (authored by me) provides context and "full" (more powerful than the current proposal, but more questionable also) idea, but I believe that this, more moderate, extension, could be a reasonable start. **Proposal:** Allow matching several values at once, when matching by case. Example: ```ruby case (x, y) when (0..10, 0..10) ... when (Array, nil) # coordinates were passed as an array in first argument ... when (Numeric, nil), (nil, Numeric) # somehow one of coordinates were missing ... ``` **Justification:** * The syntax change is minimal (no new keywords/special chars), yet visible (very little possibility of hidden incompatibilities) * It is alike deconstruction when passing arguments to methods or blocks * It allows _gradual_ adding of more features in the future versions of Ruby once the new syntax will become familiar: ```ruby case (x, *y) # flatten y when (*Numeric) # match only an array of numerics ... when (_, Array) # skip any ... when (Numeric, Numeric => y, Hash => options) # match & assign, like in rescue ... ``` **Links:** * [Blog post](https://zverok.github.io/blog/2018-06-26-pattern-matching.html) with reasons, links to previous discussions and more examples * [Experimental gem](https://github.com/zverok/pattern-matching-prototype) to try as much of new proposals as possible to imitate in the current Ruby version. PS: Alternative syntax (reusing "block arguments" sign): ```ruby case |x, y| when |0..10, 0..10| ... when |Array, nil| ... when |Numeric, nil|, |nil, Numeric| # OK, that's probably weird ... ``` -- https://bugs.ruby-lang.org/ Unsubscribe: