Project

General

Profile

Feature #16355

Updated by ktsj (Kazuki Tsujimoto) almost 3 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] 
 ``` 

Back