Я в ситуации, что n gem foo_bar
, который я написал, и который я использую следующим образом:
require 'foo_bar'
include FooBar
suddendly, появилась константа Baz
:
defined? Baz #=> :constant
Baz.class #=> Module
Я забыл, где я определил Baz
. Если у него были какие-либо методы экземпляра, я мог бы использовать метод #source_location
, чтобы найти файл, в котором я определил Baz
. Но он не имеет:
Baz.instance_methods #=> []
Как найти, в каком файле (или где) указан модуль, который появился в моем верхнем пространстве имен?
Дополнительная запись и поиск: Постоянная, о которой я говорю, это Net
, и ее внешний вид не привязан к include FooBar
, а к другой строке, require
моего драгоценного камня sy
(http://gihub.com/boris-s/sy), которую вы можете установить с помощью gem install sy
. Нажав драгоценный камень (https://github.com/boris-s/sy/blob/master/lib/sy.rb), я обнаружил, что ни одна из строк запроса или верхние строки до строки module SY
не делает не запускать Net
внешний вид. Определение module SY
делает.
Кроме того, я нашел прагматичный ответ Net
Net
, как в Net::HTTP
. Авторы не предполагали, что кто-то будет работать с другими видами сетей, чем с сетями, и я не думал о Net::HTTP
, потому что я работал с сетями Петри и определял свои собственные классы Net
. Хотя я решил свою практическую проблему, все же интересно найти общий ответ на поиск источников модулей.