Project

General

Profile

Backport #3604

Updated by jeremyevans0 (Jeremy Evans) over 5 years ago

=begin 
  
  class C 
    def respond_to?(name) 
      puts "C: #{name}" 
      return false 
    end 
  end 
 
  File.path(C.new) rescue p $! 
  File.open(C.new) rescue p $! 
  File.ctime(C.new) rescue p $! 
  File.dirname(C.new) rescue p $! 
 
  prints: 
 
  C: to_str 
  C: to_path 
  C: to_str 
  #<TypeError: can't convert C into String> 
  C: to_int 
  C: to_hash 
  C: to_str 
  C: to_path 
  C: to_str 
  #<TypeError: can't convert C into String> 
  C: to_io 
  C: to_str 
  C: to_path 
  C: to_str 
  #<TypeError: can't convert C into String> 
  C: to_str 
  C: to_path 
  C: to_str 
  #<TypeError: can't convert C into String> 
 
  Is there any reason why to_str is called twice on the arguments? Shouldn't to_path be called first and then to_str (i.e. the path conversion should be preferred over string conversion)? 
 
 =end 
 

Back