superと書いた時にどのclassのmethodが呼ばれるのか?
Rubyで
super
と書いた時に、どこで定義したやつが呼ばれるのかがぱっと知りたかった。 self.class.ancestors.each { |k| if k.method_defined? :<知りたいメソッド名>; puts k; end }
とかで、祖先の中の同名methodの定義されてるclassがわかる気がした。
method_missing
とかで反応してると見えないけど。 include
されてるやつとかもこれだと反応してしまう。なんかもっといい方法ある?
method(:<name>).super_method.source_location
とかで定義されている位置がすぐにわかるとのお便りを頂きました。 これだと
super
の super
のlocationがわからなかったりする。 調べたいところのクラス
C
とメソッド m
に対して C.instance_method(:m).super_method
するしかないのかな。 呼んでみればTracePointでわかる という方法もあるというお便り