2012-06-03 38 views
0

我不認爲我理解這個錯誤信息。這是否意味着my_file.dart已由其他文件提供,例如my_main.dart包含:這個源文件被my_file.dart通過#source指令包含,所以本身不能包含指令

#source('my_file.dart'); 

等等my_file.dart不能源其他文件?例如在my_file.dart中。

#source('my_other_file.dart'); // this can't be here? 

class MyClass { 
    Collection<MyOtherClass> myVariables; 
} 

的事情是,我有,因爲它提供了有關在my_other_file.dart「沒有這樣的類型」的類錯誤,如果我不給源my_file.dart my_other_file.dart。但是當我這樣做的時候,我得到了那個標題錯誤,「這個源文件被my_file.dart通過#source指令包含了,所以它本身不包含指令」。

我完全誤解了這條信息嗎?我如何使這些錯誤停止?

回答

3

你的理解是對的,#source -d文件不能#source其他文件。

但讓我們更深入:Dart支持庫。例如,如果您在服務器上使用Dart,則很可能會使用dart:io庫(通過在代碼中編寫#import('dart:io'))。如果您在瀏覽器中使用Dart,則很可能會使用dart:html庫。每個程序都隱含導入dart:core庫。

你當然可以編寫自己的庫。在幾乎所有情況下,圖書館將跨越多個文件。在這種情況下,這些文件的一個將有所主要:它會聲明(使用#library)庫,(使用#source)指定(使用#import)所有的依賴和其他所有的源文件。所有其他文件(那些#source-d)將只包含Dart代碼,它們都不能包含這些#library,#import#source指令。它可以是這樣的:

my_lib.dart:

#library('My Library'); 

#source('my_lib_impl.dart'); 

interface MyInterface default _MyClass { 
    foo(); 
} 

my_lib_impl.dart:

class _MyClass implements MyInterface { 
    foo() { 
    print("foo!"); 
    } 
} 

然後,如果你想在你的程序中使用這個庫,你必須#importmy_lib.dart文件。你不要#source它。

my_program.dart:

#import('my_lib.dart'); 

main() { 
    new MyInterface().foo(); 
} 

注意,在這裏,即使my_program.dart不包含#library指令,它就像一個 - 它可以#import#source文件。您可以在「入口點」腳本中執行此操作。

我試着解釋如何在Dart中使用庫,這不是直接回答你的問題,但它應該有所幫助。如果沒有,請讓我知道,我會盡量深入挖掘。

2

Ladicek有完整的解釋。關於你的具體問題:

我必須在my_file.dart中搜索my_other_file.dart,因爲如果我不這樣做,它會在my_other_file.dart中給出「沒有這樣的類型」類的錯誤。但是當我這樣做的時候,我得到了那個標題錯誤,「這個源文件被my_file.dart通過#source指令包含了,所以它本身不包含指令」。

修復的方法是:最好不要將#source('my_other_file.dart')my_file.dart的,把它放在my_main.dart

我們在Dart團隊意識到這是語言中真正令人困惑的角落之一,我們正努力想出更好的東西,但這需要時間。

相關問題