调试Object.const_get

时间:2015-07-24 01:27:46

标签: ruby dynamic

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

ax1
<matplotlib.axes._subplots.AxesSubplot at 0xcaa32b0>
ax2
<matplotlib.axes._subplots.AxesSubplot at 0xcaa32b0>

[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 是一个正确加载的类(正如您可以从第1行推断的那样)。我之前运行代码时没有引发任何异常。正确执行代码的唯一变化是我更改了存储库名称。关于如何进一步调试的建议,或者我如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

Per Ruby 2.1.1文档:如果提供了命名空间的类名,则此方法将以递归方式查找常量名称。

问题在于,当我更改目录的名称时,我不再使用Ruby 2.1.1而是使用Ruby 1.9.3。如果Object.const_get无法正常工作,请务必查看Ruby版本和相应的文档。

对于不允许使用命名空间类名的Ruby的早期版本,您可以像kardeiz所建议的那样遍历层次结构:

Object.const_get(NAMESPACE).const_get(CLASS)