Project

General

Profile

Bug #13817

Updated by nobu (Nobuyoshi Nakada) almost 2 years ago

Consider the following program:

~~~ruby ~~~
#!/usr/bin/env ruby
BEGIN {$VERBOSE = true}
require 'test/unit'
class Hash
STDERR.puts method_defined?(:<<)
alias << merge!
STDERR.puts method_defined?(:<<)
end
~~~

In older Ruby versions (1.9.3, 2.3.3), the output of this program was:

``` **
false
true
``` **

In Ruby 2.4.1, the output is

``` **
false
~/work/stash/vp5/src/test/test_xx.rb:6: warning: method redefined; discarding old <<
true
``` **

Please note:

1. The warning occurs, even though `method_defined?` method_defined? tells us that no `<<` << method is in `Hash`. Hash.
2. The warning disappears, when we do **not** require test/unit, which suggests that the problem is caused by test/unit
3. Changing the offending line to `alias *alias :<< :merge!` :merge!* does not make any difference

Back