From: Dave Grijalva Date: 2007-05-30T06:57:50+09:00 Subject: Re: Overriding to_s ------=_Part_203438_29963508.1180475870726 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline the result of foo.class is not of type String, but of type Class. when you say puts foo.to_s, the puts method is calling to_s on the class that you've returned from calling to_s. To get the expected result, define to_s like this: def to_s self.class.to_s end OR def to_s "#{self.class}" #this is not as efficient, but you're guaranteed to get a String result end -dave On 5/29/07, kimersen@gmail.com wrote: > > On May 29, 12:15 pm, Rohan Dey wrote: > > unknown wrote: > > > Hi, > > > > > I'm playing around with ruby trying to understand whats going on, and > > > here is something I don't understand. > > > > > class ZNum > > > def initialize(n) > > > @n=n > > > end > > > def to_s > > > self.class > > > end > > > end > > > > > n = ZNum.new(1234) > > > > > puts n # prints # > > > puts n.to_s # prints ZNum > > > > > In both cases it uses ZNum#to_s, but the results are different. Why? > > > > > /kim > > > > Not able to understand what you are actually asking. Can you put little > > detail on this. > > > > -- > > Posted viahttp://www.ruby-forum.com/. > > I'm working on an interface for some legacy data. > The legacy data will be stored in objects as ruby numbers (fixnum, > bignum and float), but I need to override ruby's number formating. My > example above has no practical value, it's just some odd behavior that > I would like to understand before I design my legacy interface. > > /kim > > > ------=_Part_203438_29963508.1180475870726--