我正在打包我自己的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
答案 0 :(得分:2)
你有一个错字:你忘了把d大写。
通过在Shapeset类的方法中编写Convert3d,如果Shapeset :: Convert3d OR :: Convert3d存在且你找不到,那么你会问ruby。
答案 1 :(得分:2)
因为您在Convert3D
的上下文中引用ShapeSet
,所以ruby会尝试查找ShapeSet::Convert3D
。不知道为什么会发生这种情况,有时候不会发生。
但解决方案很简单:要确保在全局命名空间中引用Convert3D
,您始终可以编写::Convert3D
。
HTH。