Ruby看到的命名空间前缀不存在

时间:2013-02-17 17:41:10

标签: ruby namespaces ruby-1.9.3

我正在打包我自己的gem,其中包含一个名为Convert3D的模块和一个名为ShapeSet的类。

当我尝试从ShapeSet的initialize方法中调用Convert3D模块的方法时,会发生以下错误。 Convert3D模块是必需的,该方法适用于调用ShapeSet.new的irb上下文。

NameError: uninitialized constant ShapeSet::Convert3d

鉴于在任何地方都没有引用“ShapeSet :: Convert3d”,ruby在这里做了什么,以及我可能做错了什么导致它?

我在OSX 10.8.2上使用Matz Ruby 1.9.3

2 个答案:

答案 0 :(得分:2)

你有一个错字:你忘了把d大写。

通过在Shapeset类的方法中编写Convert3d,如果Shapeset :: Convert3d OR :: Convert3d存在且你找不到,那么你会问ruby。

答案 1 :(得分:2)

因为您在Convert3D的上下文中引用ShapeSet,所以ruby会尝试查找ShapeSet::Convert3D。不知道为什么会发生这种情况,有时候不会发生。

但解决方案很简单:要确保在全局命名空间中引用Convert3D,您始终可以编写::Convert3D

HTH。