メソッド | 出力後の改行 | メソッド自体の戻り値 | 改行文字を含めた場合 | 配列を出力した場合 | 呼び出すメソッド |
---|---|---|---|---|---|
puts | 改行を加えて出力する。 | nil | 改行される | 配列の[]を含まず各要素ごとに改行される | to_s |
改行を加えない。 | nil | 改行される | 配列の[]を含め改行なし | to_s | |
p | 改行を加えて出力する。 | ただし文字列を出力するとその文字列がダブルクオートで囲まれる。 | 引数のオブジェクトそのものが改行されずに/nのまま表示される | 配列の[]を含め改行なし | inspect |
putsメソッド
とprintメソッド
は内部的に引数で渡されたオブジェクトに対してto_sメソッド
を呼び出して文字列に変換している。
pメソッド
はto_sメソッド
ではなくinspectメソッド
を呼び出す。
文字列が出力後にダブルクオート付きになっていた理由として内部的にStringクラスのinspectメソッドが呼び出され値が出力されている。
inspectメソッドは開発者にとって役立つ情報が含まれている。
違いについて実際に検証した結果👇
モジュール名が実行結果として出力。
対象がクラスの場合、#<クラス名:オブジェクトid インスタンス変数>
が実行結果として出力。
クラスについてto_sメソッド
と比べると
inspectメソッド
ではクラス名とオブジェクトidとインスタンス変数を出力、
to_sメソッド
はクラス名とオブジェクトidのみ出力し_インスタンス変数は出力しない。_
配列・ハッシュともに値がそのままの形で表示される。
文字列に関してto_sと比べるとダブルクオートで囲まれているか・いないかの違いがある。