putsとprintとpのメソッドはいずれも出力に使うのだが、微妙に挙動が違う。
| メソッド | 出力後の改行 | 配列の表示 | 呼び出すメソッド | 戻り値 | 対象者 | 
|---|---|---|---|---|---|
| puts | あり | 要素ごとに改行 | to_s | nil | 一般ユーザ | 
| なし | 改行しない | to_s | nil | 一般ユーザ | |
| p | あり | 改行しない | inspect | 引数のオブジェクト | 開発者(デバック用) | 
puts
putsメソッドはオブジェクト出力後の末尾に改行が入る。
puts 123
puts 'abc'
実行結果
123
abc
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の方が開発者にとって役立つ情報を返すように実施されるので、デバック用として使われる。