オブジェクトを文字列に変換する
デバッグ時にはオブジェクトを文字列に変換して内容を確認したい場合がある。
RubyではObject
にObject#to_s
が定義されているため、明示的に禁止されていない限り、あらゆるオブジェクトを文字列化できる。
obj = Object.new puts obj.to_s #=> #<Object:0x000000009a0d30>
Object.inspect
はオブジェクトの内容を、人間が読める形式の文字列に変換して返すメソッドだ。これはp
メソッドで内部的に使用されている。
class Clazz def initialize @a, @b = 1, 2 end end clazz = Clazz.new puts clazz.to_s #=> #<Clazz:0x00000002529548> puts clazz.inspect #=> #<Clazz:0x00000002529548 @a=1, @b=2> p clazz #=> #<Clazz:0x00000002529548 @a=1, @b=2>
ppライブラリには、p
を更に強化したpp
メソッドが用意されている。このメソッドは、複雑なオブジェクトをp
よりも視覚的にわかりやすく表示してくれる。
require 'pp' people = [{name:"alice", age:16}, {name:"bob", age:24}, {name:"carol", age:30}] p people #=> [{:name=>"alice", :age=>16}, {:name=>"bob", :age=>24}, {:name=>"carol", :age=>30}] pp people =begin [{:name=>"alice", :age=>16}, {:name=>"bob", :age=>24}, {:name=>"carol", :age=>30}] =end