在Ruby中有一种方法可以告诉定义方法的位置吗?

lam*_*ade 7 ruby ruby-on-rails

在Ruby中有一种方法可以告诉定义方法的位置吗?我正在浏览ruby-guide,并且有一行代码可以读取Post.all如何判断all定义的位置?

Rea*_*onk 17

如果您想知道定义方法的文件和行,请使用

Post.method(:all).source_location
Run Code Online (Sandbox Code Playgroud)

它会给你[file, line]或者nil它是一个C方法.


ctc*_*rry 7

可以通过Method对象使用方法.在那一点作为一个owner属性.所以你可以这样做:

puts Post.method(:all).owner
Run Code Online (Sandbox Code Playgroud)

这将告诉您定义方法的模块/类.