2012-12-14 62 views

回答

42

達特沒有命名空間的概念,而是它有圖書館。您可以將庫視爲等同於命名空間,因爲庫可以由多個文件組成,並且包含多個類和函數。

Dart中的隱私也在圖書館,而不是類級別(任何以下劃線作爲前綴的內容對該圖書館都是私有的)。

來定義庫(使用的實用工具庫的例子的一個例子:

// utilities.dart 
library utilities; // being the first statement in the library file 

您可以通過使用part關鍵字使同一個庫的其他文件部分部分文件只用於幫助組織你的代碼;你可以把所有的類放在一個單獨的庫文件中,或者將它們拆分成幾個部分文件(或者部分文件和庫文件) - 它對執行沒有影響。父文件夾,文件的一部分在src/文件夾。

擴大爲例e顯示零件文件。

// utilities.dart 
library utilities; 

part "src/string_utils.dart"; 
part "src/date_utils.dart"; 

那些部分文件,然後鏈接到該庫他們的一部分使用part of聲明:

// src/string_utils.dart 
part of utilities; 

// functions and classes 
String reverseString(s) => // implementation .... 

String _stringBuilder(strings) => // a private (to the library) function, 
            // indicated by the leading underscore 

//... snip other classes and functions 

現在你有一個包含一個函數庫,你可以使用該庫的其他條款import荷蘭國際集團庫:

// my_app.dart; 
import "path/to/library/utilities.dart"; 

main() { 
    var reversed = reverseString("Foo"); 
    // _stringBulider(["a","b"]); // won't work - this function is 
           // only visible inside the library 
} 

如果你想你的別名庫,以避免衝突(在這裏你可以輸入兩個庫,兩者都含有一個reverseString()功能,您使用as關鍵字:

// my_app.dart; 
import "path/to/library/utilities.dart"; 
import "some/other/utilities.dart" as your_utils; 

main() { 
    var reversed = reverseString("Foo"); 
    var your_reversed_string = your_utils.reverseString("Bar"); 
} 

import語句也使用包,因爲進口的酒吧,飛鏢的包管理器,所以你也可以在GitHub上託管你的圖書館或其他地方,並引用您的圖書館像這樣:

// my_app.dart; 
import "package:utilities/utilities.dart"; 

main() { 
    var reversed = reverseString("Foo");   
} 

酒館關係在一個pubspec.yaml文件,它告訴酒館在哪裏可以找到庫中定義。你可以找到更多的pub.dartlang.org

要注意,只有庫文件可以是很重要的:

  • 包含import語句。零件文件不能。
  • 包含library關鍵字。零件文件不能。
  • 包含part文件。零件文件不能。

最後一點是可運行的應用程序文件可以(而且很可能是)一個庫文件,也可以由部分文件

// my_app.dart; 
library my_app; 

import "package:utilities/utilities.dart"; 

part "src/edit_ui.dart"; 
part "src/list_ui.dart"; 
part "src/foo.dart"; 

main() { 
    var reversed = reverseString("Foo");  
    showEditUi(); // perhaps defined in edit_ui.dart....? 
} 
+0

應當注意的是,使用'部分'指令是不鼓勵的。 *「注意:您可能聽說過part指令,它允許您將庫分割爲多個Dart文件。我們建議您避免使用part並創建小型庫。」* - https://www.dartlang。組織/引導/庫/創建庫,包 – Subfuzion