2015-01-04 65 views
6

在Dart中使用庫時,我不完全瞭解part/part ofimport/export之間的區別。例如:何時使用Dart中的部分/部分與導入/導出?

one.dart: 
library one; 
part "two.dart"; 
Class One { 
}; 

two.dart: 
part of one; 
import 'somefile.dart'; 
Class Two { 
} 

library one; 
import 'two.dart'; 
Class One { 
} 

library two; 
import 'somefile.dart'; 
export 'somefile.dart'; 
Class Two { 
} 

這兩種情況似乎做同樣的事情。什麼時候使用partpart of而不是import有利?並且有import將無法​​正常工作,但partpart of會?

回答

15

在Dart中,私人成員可以在同一個庫中訪問。使用import您可以導入圖書館,並且只能訪問其公共成員。使用part/part of您可以將一個庫拆分爲多個文件,並且可以訪問這些文件中的所有代碼的私有成員。

使用part/part of不鼓勵,Dart團隊正在考慮擺脫它。我假設他們會推出類似「朋友」(https://github.com/dart-lang/sdk/issues/22841)的東西,其中兩個圖書館可以在停止part/part of(也許在未來的Dart版本)之前訪問對方的私人成員。

4

我們假設我們有一個Dart 調用mylib,其文件是lib/mylib.dart

library mylib; 

// Definitions 

這個庫可以被包含在main.dart文件

import 'package:mypackage/mylib.dart'; 

當你創建一個新的庫,並使用其他庫,你想用你的包時,使可自動,那麼你使用export

library mylib; 

export 'otherlib.dart'; 

// Definitions 

您可以使用show關鍵字只導入/導出庫的某些部分(如類或其他東西)。


您在這裏使用part of指令是錯誤的。您不能同時使用librarypart of,它用於指定屬於庫的內容。例如,您可以分割在多個文件的庫文件(部分):

假設我們有一個文件mylib.dart在:

library mylib; 

part 'src/class1.part'; 
// More parts 

然後我們在另一個文件src/class1.part中指定的部分mylib.dart

part of mylib; 

class Class1 { 
    /* ... */ 
} 
+0

謝謝。部分圖書館和圖書館的使用只是一個錯字,所以我將其編輯出來供將來閱讀這個問題。 – rchkm

+0

@Robert我在**導入**自己的文件(比如說一個具有類定義,服務等的文件)與使它們成爲**庫的一部分之間存在矛盾。我發現使用'import'可以很清楚地知道每個文件的依賴關係,但是每次使用新的東西時都會繼續添加導入,而''的部分/部分只是給你一切,但是你不會知道依賴關係。此外,您的主庫文件具有所有的依賴關係。然後,我很欣賞的一件事是在主庫文件上創建頂層函數。你怎麼看? –

+0

你可以這樣做,因爲你想:) – Robert

3

dartlang.org網站上的Creating Library Packages文章建議避免使用part/part of

注意:您可能聽說過部分指令,它可以讓你 拆分庫到多個飛鏢文件。我們建議您使用零件避免 ,並改爲創建小型庫。

這裏提到的'迷你圖書館'是src中的小型圖書館dart文件,它們被導入到主庫中並從主庫中導出。