同じ出力用のメソッドですが、何が違うのかを見て行きましょう。
文字列、数値、配列をそれぞれ出力してみます。
オブジェクトを作って、
[1] pry(main)> str = "123" => "123" [2] pry(main)> num = 123 => 123 [3] pry(main)> array = ["one", "two", "three"] => ["one", "two", "three"]
いざ。
puts
・文字列オブジェクト
[5] pry(main)> puts str 123 => nil
・数値オブジェクト
[6] pry(main)> puts num 123 => nil
・配列オブジェクト
[7] pry(main)> puts array one two three => nil
数値は文字列に変換し、出力時に改行が入ります。
p
・文字列オブジェクト
[8] pry(main)> p str "123" => "123"
・数値オブジェクト
[9] pry(main)> p num 123 => 123
・配列オブジェクト
[10] pry(main)> p array ["one", "two", "three"] => ["one", "two", "three"]
文字列と数値の見分けがつきます。
内部的に inspect メソッドを呼んで、数値か文字列かどうかを調べています。
配列はそのまま内容が表示されますね。
ちなみに戻り値は、引数で渡したものがそのまま返ってきています。
主に、デバッグに使われるみたいです。
・文字列オブジェクト
[11] pry(main)> print str 123=> nil
・数値オブジェクト
[12] pry(main)> print num 123=> nil
・配列オブジェクト
[13] pry(main)> print array ["one", "two", "three"]=> nil
puts と同じような出力のされかたですが、改行がつきません。

- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2013/06/04
- メディア: 単行本
- この商品を含むブログ (26件) を見る

- 作者: 久保秋真
- 出版社/メーカー: SBクリエイティブ株式会社
- 発売日: 2013/11/08
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
(参考)
module function Kernel.#puts
module function Kernel.#p
module function Kernel.#print