我遇到一个问题,即将常量映射到错误的文件。调试时,它会显示奇怪的内容:
=> 1: class App::CloudCredential < App::Credential
2: end
(byebug) Object.const_defined? "App::Credential"
false
(byebug) App::Credential
App::Shared::Credential
(byebug) App::Credential.class
Module
(byebug) App::Credential.name
"App::Shared::Credential"
我的问题是,当Object.const_defined? "App::Credential"
返回false
时,
const_missing
?Object.const_defined?
告诉我的内容一样)byebug
中使用哪种测试)导致const_missing
。我试图找出为什么将此App::Credential
映射到一个完整的错误文件(App::Shared::Credential
的文件) 更多信息:这个App::Shared::Credential
实际上是一个包含在class App::Credential
中的模块,而这个App::Shared::Credential
已经被另一个类包含了。 >
谢谢
答案 0 :(得分:3)
您所描述的完全没有矛盾。
当您尝试访问App::Credential
时,您正在当前常量名称空间中查找它,但是当您使用const_defined?
时,您明确地询问{{1 }}是否在那里定义了常量。但是Object
可以在App::Credential
的子类中定义,而不是直接在Object
中定义,然后将返回Object
。
false
由于您正在两个不同的地方看书,因此得到两个不同的答案是非常明智的。