Project

General

Profile

Feature #15231

Updated by znz (Kazuhiro NISHIYAMA) about 6 years ago

`Object#=~` receives (and just discards) an argument, and always returns nil.    What purpose is this method for? 

 The following behavior that `Object#=~` caused was confusing to me. 

 ``` 
 ["foo"] =~ /foo/ #=> nil 
 ``` 

 More precisely: the actual example that I encountered was to parse coverage data from output of coverage measurement tool by using `Open3.capture2`: 

 ``` 
 out = Open3.capture2("gcov", ...) # BUG: `out, =` was intended 
 if out =~ ~= /lines\.*: *(\d+\.\d+)%/ 
   ... 
 end 
 ``` 

 Obviously, I forgot a comma to receive the return value of `Open3.capture2`.    The method returns a two-element array, and `out =~` ~=` calls `Object#=~`, which hided the bug.    (Worse, I took several tens of minutes to debug it because I first thought that this is a bug of regexp, and spent tweaking the regexp.) 

 I guess `Object#=~` was intended for general pattern matching, but presently the role was taken over by `Object#===`. 


 So.    How about removing `Object#=~`? 

 Concerns: 

 * @usa said `NilClass#=~` should be newly introduced because of: `if gets =~ /re/` 
 * `Object#!~` is difficult to remove: some classes define only `#=~`, and expect `Object#!~` to delegate to `#=~`.

Back