Project

General

Profile

Bug #13145

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

 Ruby 2.4.0 has a bug that `Symbol` Symbol converted from `String` String at first cannot be cloned: 

 
 ~~~ ruby 
 user@mypc ~$ irb 
 irb(main):001:0> :abc.clone    # When :abc has not been created from String (e.g. 'abc'.to_s.to_sym), clone will work. 
 => :abc 
 irb(main):002:0> 'abc'.to_s.to_sym 
 => :abc 
 irb(main):003:0> :abc.clone    # This clone will also work. 
 => :abc 
 irb(main):004:0> 'abcd'.to_s.to_sym 
 => :abcd 
 irb(main):005:0> :abcd.clone    # This clone WON'T WORK!? 
 TypeError: allocator undefined for Symbol 
	 from (irb):5:in `clone' 
	 from (irb):5 
	 from /usr/local/bin/irb:11:in `<main>' 
 irb(main):006:0> 
 ~~~ 

 As written in Ruby 2.4.0 documentation (e.g. https://docs.ruby-lang.org/ja/latest/method/Object/i/clone.html), 
 Symbol#clone must return itself. 

 Currently, I define Symbol#clone as the following in order to fix this bug: 

 
 ~~~ ruby 
 class Symbol 
   def clone 
     self 
   end 
 end 
 ~~~ 
 I think something has gone wrong ...

Back