2013-05-13 74 views
0

以下示例(1)讀取文件並打印內容,而不顯式地將文件內容分配給變量(即「.then(stdout.write)」)。但是,如果我想要做的不僅僅是打印內容(2),我需要將內容分配給一個變量(我認爲)。使用readAsString()讀取文本文件並使用結果

是否有可能實現(打印內容和做更多),而不分配文件的文本到變量?

在第一個示例中,是否創建了一個隱式變量?或者換一種說法,example1通過不創建顯式變量來使用更少的資源?

//Example 1: 
import 'dart:io'; 
void main() { 
    new File(new Options().script) 
    .readAsString(encoding: Encoding.ASCII) 
    .then(stdout.write) 
    .catchError((oError) => print(oError)); 
    print("Reading file ...\n"); 
} 

//Example 2: 
import 'dart:io'; 
void main() { 
    new File(new Options().script) 
    .readAsString(encoding: Encoding.ASCII) 
    .then((String sText) { 
     stdout.write(sText+"\n\n"); 
     print ('Completed'); 
    }) 
    .catchError((oError) => print(oError)); 
    print("Reading file ...\n"); 
} 
+1

您可以通過刪除catchError的方法級聯來簡化代碼。一般而言,鏈接來自Future的調用以確保Future的結果和/或錯誤正確傳播。我會更新你的代碼。 – 2013-05-14 05:33:46

+0

謝謝,我會再看看它。 – 2013-05-14 15:31:44

回答

1

在第一個例子,這樣的:

.then(stdout.write) 

是相同的:

.then((String sText) { 
    stdout.write(sText); 
}) 

技術上還有一次函數調用,你又多了一個變量,它的成本,應你幾個字節(我不知道確切的實現)。字符串是不可改變的;您只接收對String的引用,因此您不使用第二個版本來保存資源(除了函數調用和幾個字節的內存)。

無論你想要處理字符串的內容,當然可能會涉及到使用資源,但除非文件很大,否則這應該不是問題。

+0

我懷疑有任何內存或性能差異。優化器應該能夠刪除額外的函數調用。但是,額外的字符串連接會有細微的差別。 – 2013-05-14 02:13:55

相關問題