2013-05-22 85 views
12

我在一類警告說,「導入的庫具有相同的名稱時,他們沒有」

import 'package:dart_web_toolkit/ui.dart'; 

import '../../util/flex_table_builder.dart' as ftBldr; 

import '../factors_list_view.dart'; 


class MediatingFactorsView extends Composite 
{ 
//... 
} 

但是下面的import語句,最後進口statment將被標記警告:

The different imported libraries 'flex_table_builder.dart' and 'factors_list_view.dart' should not have the same name 

這些名稱是完全不同的,我看到在我更新到最新的飛鏢編輯器後,我的代碼會重複這個操作。這是一個錯誤嗎?

+1

什麼是庫名? –

+0

上面使用的唯一庫是庫名稱爲dart_web_toolkit的第一個導入。另外兩個導入是我創建的本地dart src文件。 –

回答

11

請確保您正在分配庫名稱到每個文件。該文件的第一行應該是:

library foo; 

您應該爲每個使用的庫使用不同的名稱。庫名由library指令指定,但匿名庫被視爲具有相同名稱,這是警告來自的地方。

這是在Dart specification中導入兩個同名的庫的警告。

你可以閱讀更多關於如何在這裏使用的庫在language tour.

+0

很高興幫助:)如果問題得到解決,請將答案標記爲已解決。 –

+0

非常感謝。但是這個問題只是在我更新到現在的Dart Editor之後纔出現的。以前一切都很好。另一件事是上面的第二個和第三個導入不是庫,它們是我在lib目錄之外創建的dart源文件。你還認爲我應該把我的所有文件放在一個特定的庫中。我嘗試過這樣做,但儘管我在生成的包中看到了庫名,但每當我嘗試以標準方式引用它們時,代碼始終會失敗。謝謝你的幫助。 –

+0

由您來決定它們是邏輯上自己的庫還是您的主庫的一部分(您是否想要在不同的庫中重用該代碼?)。如果他們不是自己的圖書館,則不需要導入任何東西。 –

3

你可以按照Package layout conventions

對於錯誤:

onset_view.dart和duration_view.dart不應該有相同的名稱

不同的導入庫,你應該在每個導入鏢文件中定義不同名。

一個其它附加註釋,您應該使用import 'package:epimss/shared.dart';代替import 'packages/epimss/shared.dart';import 'site_view.dart';,而不是import './site_view.dart';

+0

感謝一百萬亞歷山大。你的回答非常有幫助和讚賞。 –

2

的警告正確指示有問題。

正確的解決方案取決於Dart文件是否在概念上相互分離或相關。

不同的庫

如果它們在概念上不同的,那麼就應該被定義爲屬於不同庫具有不同的庫名。

import命令用於從一個不同,不屬於同一編譯單元引用編譯單元。它期望每個圖書館都有獨特的圖書館名稱。

如果Dart文件被視爲庫(即是import語句的主題)並且未明確命名,則其隱式名稱爲空字符串。在這種情況下,這兩個文件都被視爲庫,並且它抱怨存在兩個具有相同名稱的庫(空字符串)。

對於此作爲單獨的庫工作,給他們不同的名字:

頂層文件:

import 'foo.dart'; 
import 'bar.dart'; 

foo.dart:

library foo; 

bar.dart:

library bar; 

同一個庫的一部分

但是,如果他們相關,他們不應該被引用爲庫。也就是說,不要使用import命令。使用part命令,該命令將Dart文件視爲編譯單元,該編譯單元屬於相同的庫。

頂層文件:

library baz; 
part 'foo.dart'; 
part 'bar.dart'; 

foo.dart:

part of baz; 

bar.dart:

part of baz; 

只有頂端的庫文件可以包含part語句。即使它們彼此引用定義,您也不需要(也不能)在其他文件中使用part語句。如果有多個文件,只需將它們全部列入頂層庫文件(以任何順序)。

雖然庫的隱式名稱是空字符串,但在涉及多個部分時無法使用該名稱:因此即使這些文件永遠不會作爲庫導入,您仍然需要明確地爲它分配一個庫名稱。

請記住:importpart語句與C預處理器中的#include宏有很大不同。

相關問題