我的情况是foo_bar我写的na gem ,我使用如下:
require 'foo_bar'
include FooBar
Run Code Online (Sandbox Code Playgroud)
突然Baz出现,不断出现:
defined? Baz #=> :constant
Baz.class #=> Module
Run Code Online (Sandbox Code Playgroud)
我忘了我在哪里定义Baz.如果它有任何实例方法,我可以使用#source_location方法来查找我定义的文件Baz.但它没有:
Baz.instance_methods #=> []
Run Code Online (Sandbox Code Playgroud)
如何找到在我的顶级命名空间中弹出的模块在哪个文件(或哪里)?
额外的添加和发现:我所说的常数是Net,它的外观与我的宝石(http://gihub.com/boris-s/sy)的include FooBar另一行无关,你可以通过它安装.通过踩宝石(https://github.com/boris-s/sy/blob/master/lib/sy.rb),我发现没有任何需要的行,或者直到行的顶行都没有触发出现.的定义一样.requiresygem install symodule SYNetmodule SY
此外,我找到了答案务实Net的Net作为Net::HTTP.作者没有假设有人会使用其他类型的网络而不是互联网,我没有想到Net::HTTP,因为我正在使用Petri网并定义自己的Net类.虽然我解决了我的实际问题,但找到找到模块源的一般答案仍然很有意思.
Jar*_*eck 10
.. 出现了一个不变的 Baz .. 我忘记了我在哪里定义了 Baz 。
Ruby 2.7 添加了const_source_location.
Object.const_source_location('Baz')
#=> ["/../app/models/baz.rb", 3]
Run Code Online (Sandbox Code Playgroud)
假设加载了文件,您可以执行以下操作:
$LOADED_FEATURES.select { |file| File.read(file).include?('module Foo') rescue false }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1980 次 |
| 最近记录: |