Issue #16355 has been reported by ktsj (Kazuki Tsujimoto).

----------------------------------------
Feature #16355: Raise NoMatchingPatternError when `expr in pat` doesn't match
https://bugs.ruby-lang.org/issues/16355

* Author: ktsj (Kazuki Tsujimoto)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
Currently, single line pattern matching(`expr in pat`) returns true or false.

```
[1, 2, 3] in x, y, z #=> true (with assigning 1 to x, 2 to y, and 3 to z)
[1, 2, 3] in 1, 2, 4 #=> false
```

I think `expr in pat` should raise an exception when it doesn't match.
Because if a user doesn't check the return value of `expr in pat`, matching failure occurs implicitly and it may cause problems in subsequent processes.

```
expr in [0, x] # A user expects it always matches, but if it doesn't match...
...
(snip)
...
x.foo #=> NoMethodError (undefined method `foo' for nil:NilClass)
```

I also propose that `expr in pat` returns the result of `expr` if it matches.
It is similar to assignment.
	
```
x, y, z = 1, 2, 3      #=> [1, 2, 3]
[1, 2, 3] in [x, y, z] #=> [1, 2, 3]
```


---Files--------------------------------
expr-in-pat-raises-error.patch (2.59 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>