Object#to_sはオブジェクトの文字列表現. Kernel#printやKernel#putsは文字列以外のオブジェクトが引数に渡された場合にこのメソッドを使って文字列に変換する. to_strは暗黙の変換用. 暗黙の変換...? オブジェクトが「文字列が使われるすべての場面で代置可能であるような、文字列そのものとみなせるようなものという厳しいもの」とある. class Test def to_s 'to_s' end def to_str 'to_str' end end t = Test.new puts "#{t}" # "to_s" puts "123"+t # "123to_str" puts "to_strrrrr".include?(t) # 引数は"to_str"に変換される Matzいわく「Stringと類似のメソッド集合を持たないオブジェクトはto_strを定義す