调试 Object.const_get

Debugging Object.const_get

考虑以下代码(我知道过去 30 分钟):

[1] pry(main)> DurhamScraper::Tweet
=> DurhamScraper::Tweet
[2] pry(main)> Object.const_get("DurhamScraper::Tweet")
NameError: wrong constant name DurhamScraper::Tweet
from (pry):2:in 'const_get'
[3] pry(main)> String
=> String
[4] pry(main)> Object.const_get("String")
=> String

DurhamScraper::Tweet 是正确加载的 class(您可以从第 1 行推断)。当我 运行 之前的代码时没有出现异常。代码正确执行后的唯一变化是我更改了存储库名称。关于如何进一步调试或我如何解决这个问题的任何建议?

根据 Ruby 2.1.1 文档:如果提供了命名空间 class 名称,此方法将递归查找常量名称。

问题是,当我更改目录名称时,我不再使用 Ruby 2.1.1,而是使用 Ruby 1.9.3。如果 Object.const_get 没有像您预期的那样工作,请确保检查 Ruby 版本和相应的文档。

对于不允许命名空间 class 名称的 Ruby 的早期版本,您可以按照 kardeiz 的建议遍历层次结构:

Object.const_get(NAMESPACE).const_get(CLASS)