Hi,
I've come across the following feature when using an overloaded to_s
method on an array. A simple example should explain it best :

class Foo
	attr_reader :a, :b
	
	def initialize
		@a=rand(10)
		@b=rand(10)
	end
	
	def to_s
		": #{a} #{b} :"
	end
	
	def diff
		a-b
	end
end

test=Array.new
def test.to_s
	str=""
	self.each { |i| str+="| #{i.diff.to_s} " }
	str
end

(1..5).each { test <<  Foo.new }

puts test
puts test.to_s

print test,"\n"
print test.to_s,"\n"

This gives the following results:

: 3 2 :
: 3 6 :
: 0 1 :
: 9 4 :
: 7 1 :
| 1 | -3 | -1 | 5 | 6 
| 1 | -3 | -1 | 5 | 6 
| 1 | -3 | -1 | 5 | 6 

So why does puts no pick up the overladed to_s function defined for
test, whereas print does?

Any help would be appreciated.

Steve