From: John Winters Date: 2008-08-01T05:18:35+09:00 Subject: Needing help with which to_s gets called I'm a beginner learning Ruby and I've hit something which I can't find an explanation for in my text books. If I run the following code: class Able < Array # def initialize(contents) # @contents = Array.new(contents) # end def to_s "[Able: #{self.join(", ")}]" end end class Baker def initialize(contents) @contents = Array.new(contents) end def <<(item) @contents << item end def to_s "[Baker: #{@contents.join(", ")}]" end end item = Baker.new(["a", "b"]) item << Able.new(["c", "d"]) item << "e" puts item I get the following output: [Baker: a, b, c, d, e] Clearly the to_s method in my Able class is not being called. If however I change the definition of Able to: class Able def initialize(contents) @contents = Array.new(contents) end def to_s "[Able: #{@contents.join(", ")}]" end end (Note that it no longer inherits from Array and instead contains an array as an instance variable.) I now get this output (which is what I wanted in the first place). [Baker: a, b, [Able: c, d], e] Why when Able is a sub-class of Array does my to_s method get ignored? TIA, Joh P.S. I tried to read the FAQ as instructed first but the link given for it gives a "Not found" error. -- Posted via http://www.ruby-forum.com/.