puts
とprint
とp
のメソッドはいずれも出力に使うのだが、微妙に挙動が違う。
メソッド | 出力後の改行 | 配列の表示 | 呼び出すメソッド | 戻り値 | 対象者 |
---|---|---|---|---|---|
puts | あり | 要素ごとに改行 | to_s | nil | 一般ユーザ |
なし | 改行しない | to_s | nil | 一般ユーザ | |
p | あり | 改行しない | inspect | 引数のオブジェクト | 開発者(デバック用) |
#puts
puts
メソッドはオブジェクト出力後の末尾に改行が入る。
puts 123
puts 'abc'
実行結果
123
abc
#print
print
メソッドはオブジェクト出力後に改行を加えない。
print 123
print 'abc'
実行結果
123abc
#p
p
メソッドは主にデバック用で、オブジェクトと型表現も含めた形の文字列を出力し、末尾に改行が入る。
文字列を出力すると、その文字列がダブルクォートで囲まれている。
p 123
p 'abc'
実行結果
123
"abc"
\n
のようなエスケープ文字もそのまま出力される。
p "abc\ndef"
実行結果
"abc\ndef"
#違い
puts
とprint
は改行するかしないかの違いとなる。
puts
とp
はいずれも、オブジェクトの内容を文字列に変換するメソッドを内部的に呼び出している。
しかしinspect
を呼び出しているp
の方が開発者にとって役立つ情報を返すように実施されるので、デバック用として使われる。
#参考書