Project

General

Profile

Bug #13817

Updated by nobu (Nobuyoshi Nakada) over 6 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