fugafuga.write

日々のログ

Ruby 2.x.x 入門 - puts と p と print の違いについて -

同じ出力用のメソッドですが、何が違うのかを見て行きましょう。



文字列、数値、配列をそれぞれ出力してみます。

オブジェクトを作って、

[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 メソッドを呼んで、数値か文字列かどうかを調べています。
配列はそのまま内容が表示されますね。

ちなみに戻り値は、引数で渡したものがそのまま返ってきています。
主に、デバッグに使われるみたいです。

print

・文字列オブジェクト

[11] pry(main)> print str
123=> nil

・数値オブジェクト

[12] pry(main)> print num
123=> nil

・配列オブジェクト

[13] pry(main)> print array
["one", "two", "three"]=> nil

puts と同じような出力のされかたですが、改行がつきません。



たのしいRuby 第4版

たのしいRuby 第4版

作りながら学ぶRuby入門 第2版

作りながら学ぶRuby入門 第2版


(参考)
module function Kernel.#puts
module function Kernel.#p
module function Kernel.#print