2016-12-04 25 views
1

我在名爲Main.hx的文件中有一個主要的Haxe腳本。在這個腳本中,我可以導入任何現有的包,包括其他Haxe腳本在同一個目錄中被認爲是包的,但是在嵌套目錄中聲明的Haxe腳本(應該被視爲包)不適用於import(I' m幾乎可以肯定他們被忽略了)。如何導入嵌套目錄中的包(Haxe)?

Haxe只是說'Test不存在。當我試圖得到wow.test.Test它說的是相同的東西,並且與test.Test相同。我也嘗試將./wow/test.hx的包名設置爲wow.testtest,這也是相同的情況。

它只有在./wow之外拋出test.hx並正常導入它的東西時才起作用,如:test.*而不是wow.test.*


我的測試結構:

- ./Main.hx -

package; 

import haxe.unit.TestCase; 
import openfl.display.Sprite; 
import native.*; 
import wow.test.*; 

class Main extends Sprite 
{ 

    public function new() 
    { 
     super(); 
     new Test(); 
    } 
} 

- ./wow/test.hx -

package; 

class Test 
{ 
    public function new() 
    { 
     trace("Dum !!"); 
    } 
} 

或者我需要配置它嗎?

回答

2

Haxe包是文件夾,它們包含的文件被稱爲模塊。模塊本身可以包含一個或多個類型

引述the manual

的(點狀)路徑的類型由包,模塊名稱和類型名。它的一般形式是pack1.pack2.packN.ModuleName.TypeName

。在你的例子兩個問題:

  • 模塊名稱必須以大寫字母開始,如果重命名模塊test.hxTest.hx ,您將能夠使用import wow.Test.Test導入該類型。但由於模塊名稱和類型名稱相同,因此可以省略模塊名稱,只需使用import wow.Test即可。
  • 你需要在模塊測試來聲明包:package wow;
+0

這解決了這個問題,它在控制檯中正確記錄,當我構建'Test',但我只能訪問它裏面'wow.Test' 。我試圖在導入時聲明這個:'wow.test.Test',但是編譯器在'wow.test'上說'Test'不存在。但是這對我有很大的幫助......嗯,這就解釋了爲什麼包在我的主要腳本中必須是空的。 – Hydro

+0

看來,haxe編譯器不允許模塊以小寫字母開頭,我編輯了答案以反映這一點。 – memilian

+0

它現在是有道理的。感謝有興趣的細節 – Hydro