您如何回溯 class 到 library/gem 它的加载来源?

How do you backtrace a class to library/gem it's loaded from?

如果我在 Ruby 中有一个 class 和一个长达数千行的 Gemfile,解决 class => gem 关系的最佳方法是什么?

Gemfile 1000 行长 可能会是一个很大的痛苦来源,尤其是在升级库时 - 这是一个 巨大的 依赖列表!!

通常很明显,gem 是来源,只需查看命名约定即可。但如果不是,您可以使用 Method#source_location:

进行追踪
> puts method(:mystery_method).source_location
> puts MysteryClass.method(:initialize).source_location

如果您正在使用 pry,那么还有一个方便的命令可以显示 class/method 的源代码(使用 show-method 命令,或 $简称):

(pry) > $ mystery_method
(pry) > $ MysteryClass

另外值得一提的是 Method#super_method - 这在从复杂的 inheritance/mixins.

中追踪行为时非常有用