2013-10-07 56 views
1

我正在尋找類似private的屬性,它不是與類成員一起工作,而是與模塊實體一起工作。函數,類,統計員等如何防止從我的模塊導入功能?

例如,在二郎有一個出口屬性,它是這樣的:-export([fun1, fun2]),這意味着只有所有的功能fun1fun2模塊在將出口。在D中,一切似乎都默認導出,這沒問題,但有沒有辦法阻止某些具體的東西?

回答

6

在被導入的模塊中,可以標記任何私有的東西以防止其他模塊訪問它。 private在模塊級實體上的工作方式與在類成員上的工作方式相同 - 在模塊外部不可訪問,在模塊內部可用。但是,目前它仍然是可見,所以它可以創建愚蠢的錯誤,例如「模塊A的私有函數foo與模塊B的函數foo衝突」,迫使您消除名稱的歧義。 (我和其他幾個人都希望在某個時候改變它,因爲它顯然不應該是一個問題!)

在進行導入的模塊中,不能說「導入所有除外」,但是您可以導入特定名稱的列表而不導入其他名稱:

import std.stdio : File, writefln; 

void main() { 
File f; // cool 
writefln("hello"); // cool 
writeln("hey"); // "Error: 'writeln' is not defined" - the selective import didn't pull this name at all 
} 
相關問題