From: Ryan Davis Date: 2011-01-06T01:51:09+09:00 Subject: Re: actual class name On Jan 5, 2011, at 08:23 , Perry Smith wrote: > I'm trying to debug a problem I have with YAML. When I do: Why not tell us about the real problem and not the symptom? > puts "#{foo.class}" > > I get (for example) Xyz > > but I know that foo is not really of class Xyz. I think it is an > YAML::Object. The reason this happens is because to_s has been > overridden. Are you sure? > How can I get the real name of the class of an object? > > I think this is what YAML::Object is doing: > > #! /usr/bin/env ruby > > class Xyz > def self.to_s > "dog" > end > end > > x = Xyz.new > puts "#{x.class}" > > I get "dog" instead of Xyz. How can I get Xyz in this case? You can try x.class.name instead... Or you can try to restore the real name with: x.class.send :remove_method, :to_s