Я перепробовал метод =~
для подкласса String
:
class MyString < String
def =~(obj)
"Overridden method."
end
end
s = MyString.new "abc"
В некоторых случаях корректно вызывается переопределенный метод:
r = /abc/
s =~ r # => "Overridden method."
s.send(:=~, r) # => "Overridden method."
s.send(:=~, /abc/) # => "Overridden method."
а в других - обход, а вместо String#=~
:
s =~ /abc/ # => 0
s =~ (/abc/) # => 0
Я могу воспроизвести эти результаты на Ruby 1.8.7, 2.1.0. Кто-нибудь знает, почему это происходит? Это ошибка?