1

オブジェクトで「p」を呼び出すと、なぜ.to_sメソッドを呼び出すのに、実際には文字列を返さないのか、不思議です。明示的に.to_sを呼び出すと、文字列として明確に出力されます。

1.9.3p194 :078 >   class Test
1.9.3p194 :079?>     def to_s
1.9.3p194 :080?>       puts 'to string called' 
1.9.3p194 :081?>       "testing"
1.9.3p194 :082?>     end
1.9.3p194 :083?>   end
 => nil 
1.9.3p194 :084 > x = Test.new
to string called
 => testing 
1.9.3p194 :085 > x
to string called
 => testing 
1.9.3p194 :086 > p x
to string called
testing
to string called
 => testing 
1.9.3p194 :087 > p x.to_s
to string called
"testing"
 => "testing" 
4

1 に答える 1

4

pは、渡されたオブジェクトの標準化された表現を標準出力に書き込みます。その後、自分自身を返します。pが出力する文字列値が必要な場合は、inspectメソッドを使用できます。

> a = p 233
233
> a.class # Fixnum
> 233.inspect # "233"
于 2012-08-14T21:47:24.910 に答える