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