ruby - 如何找到模块的位置

标签 ruby

我的情况是 n 个我编写的 gem foo_bar,我按如下方式使用它:

require 'foo_bar'
include FooBar

突然,一个常量Baz出现了:

defined? Baz #=> :constant
Baz.class #=> Module

我忘了我在哪里定义了Baz。如果它有任何实例方法,我可以使用 #source_location 方法找到我定义 Baz 的文件。但它没有:

Baz.instance_methods #=> []

我如何找到在哪个文件(或哪里)定义了在我的顶级命名空间中弹出的模块?

附加任务和发现:我说的常量是Net,它的出现与include FooBar无关,而是另一行,require 我的 gem sy ( http://gihub.com/boris-s/sy ),您可以通过 gem install sy 安装它。通过步进 gem ( https://github.com/boris-s/sy/blob/master/lib/sy.rb ),我发现没有任何 require 行,或者 module SY 行的顶部行不会触发 Net 外观。 module SY 定义。

此外,我发现实用的答案NetNet,如Net::HTTP。作者没有假设有人会使用互联网以外的其他类型的网络,我也没有考虑 Net::HTTP,因为我正在使用 Petri 网并定义我自己的 Net 类。虽然我解决了我的实际问题,但找到查找模块源的一般答案仍然很有趣。

最佳答案

假设文件已加载,您可以执行以下操作:

$LOADED_FEATURES.select { |file| File.read(file).include?('module Foo') rescue false }

关于ruby - 如何找到模块的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22239501/

相关文章:

javascript - 如何通过循环动态设置实例变量?

ruby-on-rails - DataDog 自定义指标未使用 ROR 显示图表

ruby - 如何在 Ruby 中将 BOM 标记写入文件

ruby - 通过 Web 公开任何 Ruby 对象

ruby-on-rails - 关于在 Ruby on Rails 中使用模块的建议

ruby - 将管道字符 “|” 替换为行空格

ruby - 如何配置 Gollum-wiki 以允许基本身份验证并使用用户名进行 git 提交

php - 有什么方法可以轻松地将 Ruby 代码转换为 PHP?

ruby - Ruby 中 nil 的定义在哪里

ruby-on-rails - 使用 Ransack 一次搜索多个模型