0

对于终端输入显示了以下或类似的内容,但是使用 ctl-d 终止输入并不好。还有另一种方法可以退出这个“循环”吗?

import "dart:io";

void main() {
  stdout.write("Enter Data : ");
  new StringDecoder().bind(stdin).listen((String sInput){});
////  Do something with sInput ............
}  
4

2 回答 2

1

exit您可以在使用 dart:io 时通过运行该方法来终止 dart 程序

void exit(int status)
Exit the Dart VM process immediately with the given status code.

This does not wait for any asynchronous operations to terminate.
Using exit is therefore very likely to lose data.

从文档

该代码将进入事件处理程序的检查中listen

于 2013-05-07T20:51:50.200 回答
1

我想到了几个选项。首先,您可以使用takeWhile()设置“完成”条件:

new StringDecoder().bind(stdin)
  .takeWhile((s) => s.trim() != 'exit')
  .listen((sInput) {

当用户输入字符或类型后跟回车键时,这将使用相同的onDone处理程序(如果设置了) 。您可以通过取消订阅来获得更大的灵活性:EOFexitcancel()

void main() {
  stdout.write("Enter Data : ");
  var sub;
  sub = new StringDecoder().bind(stdin).listen((String sInput) {
    if (sInput.trim() == 'exit' || sInput.trim() == 'bye')
      sub.cancel();
    // Do something with sInput ............
  });

取消订阅不会关闭 Stream,因此onDone不会调用任何处理程序。

当然,如果您无事可做,您可以随时以exit(0)[ 1 ] 结束。

于 2013-05-07T21:16:47.783 回答