gpt4 book ai didi

dart - 在Dart中将范围对象保存在范围之外

转载 作者:行者123 更新时间:2023-12-03 03:19:00 26 4
gpt4 key购买 nike

文件读取退出后,以下内容将s保留为null:

String s;
new File('etc.stk').readAsString().then((String contents) {
s = contents;
});
// s is null here.

有没有办法保存(或克隆),或者我是否只能在.then范围内使用它?

我有数千行的编译器/解释器代码来解析和运行文件内容,并且不希望将它们全部包含在新的File范围内。

编辑

为了提供更多背景信息,我想做的是

new File('etc1.stk').readAsString()
.then((String script) {
syntaxTree1 = buildTree(script);
});
new File('etc2.stk').readAsString()
.then((String script) {
syntaxTree2 = buildTree(script);
});

并可以在后续代码中同时访问语法树1和语法树2。如果可以的话,我将全神贯注于Dart Way。

最佳答案

编辑
(此代码已经过测试)

import 'dart:async' as async;
import 'dart:io' as io;

void main(args) {
// approach1: inline
async.Future.wait([
new io.File('file1.txt').readAsString(),
new io.File('file2.txt').readAsString()
]).then((values) {
values.forEach(print);
});

// approach2: load files in another function
getFiles().then((values) {
values.forEach(print);
});
}

async.Future<List> getFiles() {
return async.Future.wait([
new io.File('file1.txt').readAsString(),
new io.File('file2.txt').readAsString()
]);
}
输出:

file1
file2

file1
file2


编辑END
提示:代码未经测试
// s is null here
是因为此行在执行之前
s = contents
此代码
new File('etc.stk').readAsString()
返回在事件队列中登记并在实际的“线程”执行完成时执行的Future。
如果您提供了更多的代码,我将为提出的解决方案提供更好的环境。
你能做的是
String s;
new File('etc.stk').readAsString().then((String contents) {
s = contents;
}).then((_) {
// s is **NOT** null here.
});
要么
//String s;
new File('etc.stk').readAsString().then((String contents) {
//s = contents;
someCallback(s)
});
// s is null here.

void someCallback(String s) {
// s is **NOT** null here
}
要么
Future<String> myReadAsString() {
return new File('etc.stk').readAsString();
}

myReadAsString().then((s) {
// s is **NOT** null here
}
也可以看看:
  • https://www.dartlang.org/slides/2013/06/dart-streams-are-the-future.pdf
  • async programming in dart
  • https://www.dartlang.org/docs/tutorials/#futures
  • https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:async
  • https://www.dartlang.org/articles/event-loop/
  • https://www.dartlang.org/articles/futures-and-error-handling/

  • 有可能
  • https://www.dartlang.org/articles/creating-streams/
  • 关于dart - 在Dart中将范围对象保存在范围之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23661094/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com