2013-02-17 36 views
-3

我正在打包自己的gem,其中包含一個名爲Convert3D的模塊和一個名爲ShapeSet的類。Ruby看到名稱空間前綴不存在

當我嘗試從ShapeSet的initialize方法中調用Convert3D模塊的方法時,會發生以下錯誤。 Convert3D模塊已經被需要,並且該方法在調用ShapeSet.new的irb上下文中工作。

NameError: uninitialized constant ShapeSet::Convert3d 

由於沒有提及「ShapeSet :: Convert3d」有史以來的任何地方,什麼是紅寶石在這裏做,什麼可能我是做錯了什麼造成的呢?

我使用馬茨的Ruby 1.9.3 OSX 10.8.2

+0

你有沒有想過在你的問題中包含一個隱藏的模塊/類定義,以便人們不必猜測你的代碼是什麼樣的? – 2013-02-17 17:44:08

+0

是的,但決定反對它,因爲我認爲通過描述關鍵點比通過複製我的代碼的簡化版本更清楚地傳達了相關細節。 – Nat 2013-02-17 17:49:45

回答

2

你有一個錯字:你忘了大寫d。

通過在Shapeset類的方法中寫入Convert3d,如果Shapeset :: Convert3d OR :: Convert3d存在並且它沒有找到,你就會問ruby。

+0

Ow是的,完全忽略了:) – nathanvda 2013-02-17 17:47:26

+0

嗯,那很尷尬。感謝命名空間的解釋。 – Nat 2013-02-17 18:01:24

2

因爲您在ShapeSet的上下文中提到Convert3D,所以ruby試圖尋找ShapeSet::Convert3D。不知道爲什麼有時會發生,有時不會。

但是解決方法很簡單:要確定您在全局命名空間中指的是Convert3D,則始終可以編寫::Convert3D

HTH。