Feature #16355
Updated by ktsj (Kazuki Tsujimoto) about 5 years ago
Currently, single line pattern matching(`expr in pat`) returns true or false. ``` [1, 2, 3] in [x, x, y, z] z #=> true (with assigning 1 to x, 2 to y, and 3 to z) [1, 2, 3] in [1, 1, 2, 4] 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] ```