gpt4 book ai didi

ruby - 如何找到模块的位置

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:54 27 4
gpt4 key购买 nike

我的情况是 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com