先日、Qiitaを見ていたらsession.inspectという記述をしている方がいらっしゃいました。
inspectって何やねん、と思い勉強したので、その備忘録として残しておきます。
今回は、inspectメソッドとはどのようなメソッドなのか、似たメソッドとの違いについて解説します。
Keywords:inspectメソッド, to_sメソッド
inspectメソッドとは?

inspectメソッドとは、レシーバーをわかりやすい文字列で返してくれるメソッドです。
以下のように使用します。
object.inspect
具体例を見た方がわかりやすいです。以下はプログラム例とその出力です。
文字列に対してメソッドを使った場合のプログラム
puts "hitori".inspect
出力
"hitori"
配列に対してメソッドを使った場合のプログラム
puts [1, 2, "3", 4, 1+4].inspect
出力
[1, 2, "3", 4, 5]
クラスのオブジェクトに対してメソッドを使った場合のプログラム
class Hitori
def initialize(name)
@name = name
end
end
puts Hitori.new("watashi").inspect
出力
#<Hitori:0x0000000100c26860 @name="watashi">
このようにinspectメソッドはオブジェクトをそのまま(または分かりやすい形)で返してくれるメソッドということがわかりました。
ってことはinspectメソッドはto_sメソッドと同じなのでは?と考えた方もいると思います。
次の章ではinspectとto_sの違いについて確認しましょう。
inspectとto_sの違い

nilに対してinspectとto_sメソッドを適応させていきましょう。
puts nil.inspect
puts nil.to_s
出力
nil
inspectメソッドの方は文字列nilが表示されましたが、to_sメソッドは真の意味でのnilが出力されました(何も表示されない)。
もう一つ例を見てみましょう。文字列に対してメソッドを使用してみます。
puts "hitori".inspect
puts "hitori".to_s
出力
"hitori"
hitori
inspectメソッドの方は""が付いた状態で出力され、to_sメソッドの方は何も付与されずに出力されました。
inspectメソッドとto_sメソッドはどちらも文字列を返すという点では同じ機能ですが、その返す文字列は微妙に異なっています。
個人的には、inspectメソッドは何のオブジェクトなのかを明確にした文字列を返し、to_sメソッドはオブジェクトの持つ意味を汲み取った上で文字列を返すといった感じで覚えています。
nilはnilというオブジェクトの一種だよ、ということが分かりやすいようにinspectメソッドは「nil」を返しますが、to_sメソッドは意味を理解してくれる親切なメソッドです。そのため、nilの意味である「何もない」ということを示す「(無)」を返してくれます。
どちらを使った方がいいのかは、状況によって変わりそうです。
まとめ

inspectメソッドはよく使うものではなさそうですが、「この変数って何者?」って思ったときに活躍してくれそうです。
まだまだ知らないメソッドがあるので学習を怠らないようにします。
最後までご覧いただき、ありがとうございます。お疲れ様でした。


コメント