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