概要
Rubyでのソースコードリーディング時に
これだけは最初に押さえておきたい!というメソッドをまとめました。
実装をしたり、ソースコードリーディングを行う際に、pryデバッグなどを行うのですが、
基本的なことを確認するときに使うRubyのメソッドがあるので、その紹介。
自身のClassを確認する
class
レシーバのクラスを調べて、出力してくれるメソッド。
意図してない箇所で、NoMethodErrorが出て、レシーバに何のクラスが入ってるのか確認したいときに使う。
自身にMix-inされているModuleや継承されているClassを調べる
ancestors
Moduleのインスタンスメソッドとして定義されています。
あるクラスやオブジェクトがどのようなクラス・Moduleをincludeしているのか?は結構気になります。
ancestors
を実行してあげると、継承ツリーの順番で返ってくるので、
include, extendされている位置関係が自身が意図した状態であるのか確認出来ます。
ActiveRecordを継承していたりすると、結構量があるので、ピンポイントで確認したい場合、
HogeClass.ancestors.include?(確認したいクラス名)
をしてあげると、良いかと思われます。
参考
https://ref.xaio.jp/ruby/classes/module/ancestors
自身が使用できるメソッドを調べる
methods
使用できる全てのmethodを出力
すごい量が出てくるので、
Hoge.methods.grep(/部分検索文字列/)
で探したりしてます。
このメソッドは、インスタンスメソッドなのかを調べたくなってくる時がある。
- インスタンスか
- 特異かは調べられるようにしておこう
instance_methods
使用できる全てのインスタンスメソッドを出力
スーパークラスやMix-inしてるModuleのインスタンスメソッドも含まれる。
hoge.instance_methods(false)
のように引数にfalseを渡すと、
レシーバで定義されているインスタンスメソッドのみを出力する。
参考
https://ref.xaio.jp/ruby/classes/module/instance_methods
singleton_methods
レシーバが使用できる全ての特異メソッドを出力
スーパークラスやMix-inしてるModuleの特異メソッドも含まれる。
hoge.singleton_methods(false)
のように引数にfalseを渡すと、
そのオブジェクトで定義されているメソッドのみを出力する。
参考
https://ref.xaio.jp/ruby/classes/object/singleton_methods
自身が保持している変数を調べる
- インスタンス変数
- クラス変数
- 定数は調べられるようにしておこう
methodsのように、全ての変数を返すというものはないっぽい
instance_variables
保持しているインスタンス変数を出力
参考
https://ref.xaio.jp/ruby/classes/object/instance_variables
class_variables
保持しているクラス変数を出力
参考
https://ref.xaio.jp/ruby/classes/module/class_variables
constants
保持している定数を出力
hoge.constants(false)
のように
falseをつければ、そのオブジェクトで定義されている定数のみを出力する。
参考
https://ref.xaio.jp/ruby/classes/module/constants
まとめ
pry自体の機能を使ったいい方法もあるので、それも別途記事にする