Project

General

Profile

Feature #16670

Reverse order of `expression` in `pattern` for 1-line pattern matching while it's still experimental

Added by ttilberg (Tim Tilberg) 12 months ago. Updated 4 months ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:97344]

Description

Currently the 1-line syntax for pattern matching is:

# Usage: <expression> in <pattern>

expression = {
  pattern: "Example"
}

expression in {pattern: something}
# something => "Example"

Is it technically possible, and desirable to switch the order of this syntax to:

# Usage: <pattern> in <expression>

expression = {
  pattern: "Example"
}

{pattern: something} in expression
# something => "Example"

?

Here are my reasons:

  • It is more intuitive in English -- we are "finding a pattern in something". Finding "something in a pattern" doesn't seem to make sense.
  • Assignment is happening, and this keeps assignment on the left side of the operator which feels more natural.
  • It matches existing behavior with the workings of the case statement:

Understanding that a case block evaluates each when expression using when_expression === case_expression makes more consistency with when_pattern in case_pattern using the new operator.

case something
when /pattern/
end

# is equivalent to

/pattern/ === something

# This creates more parity with

case something
in {pattern: x}

# would be equivalent to

{pattern: x} in something

Please see the following discussion on Reddit: https://www.reddit.com/r/ruby/comments/favshb/27s_pattern_matching_official_docs_recently_merged/fj2c7ng/

Also available in: Atom PDF