Project

General

Profile

Actions

Feature #15231

closed

Remove `Object#=~`

Added by mame (Yusuke Endoh) about 3 years ago. Updated about 3 years ago.

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

Description

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 hid 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 (Usaku NAKAMURA) 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 #=~.
Actions

Also available in: Atom PDF