Dart库之旅中的迭代示例错误

时间:2018-08-03 06:38:03

标签: dart

问题

如何实现“ Dart库之旅”中的迭代示例?

我知道这是必须补充的代码,但是我该如何补充呢?

A Tour of the Dart Libraries

class Process {
  // Represents a process...
}

class ProcessIterator implements Iterator<Process> {
  @override
  Process get current => ...
  @override
  bool moveNext() => ...
}

// A mythical class that lets you iterate through all
// processes. Extends a subclass of [Iterable].
class Processes extends IterableBase<Process> {
  @override
  final Iterator<Process> iterator = ProcessIterator();
}

void main() {
  // Iterable objects can be used with for-in.
  for (var process in Processes()) {
    // Do something with the process.
  }
}

开发环境

尝试→错误

我自己阅读并执行了文档,但是发生了以下错误。

class ProcessIterator implements Iterator<Process> {
  @override
  Process get current => new Process();
  @override
  bool moveNext() => false;
}

->错误:“ IterableBase”期望使用0个类型的参数。

最诚挚的问候,

2 个答案:

答案 0 :(得分:1)

两件事。

1)Process在网络上不可用,因此您的DartPad示例不起作用。

2)IterableBasedart:collection中。别忘了导入。

此代码似乎对我有用:

import 'dart:collection';

class ProcessIterator implements Iterator<int> {
  @override
  int get current => 0;
  @override
  bool moveNext() => false;
}

// A mythical class that lets you iterate through all
// processes. Extends a subclass of [Iterable].
class Processes extends IterableBase<int> {
  @override
  final Iterator<int> iterator = ProcessIterator();
}

main() {
  for (var thing in Processes()) {
    print(thing);
  }
}

请记住,将sync*用于自定义迭代器通常要容易得多。

Iterable<int> _myProcesses() sync* {
  yield 1;
  yield 2;
  yield 3;
}

main() {
  for (var thing in _myProcesses()) {
    print(thing);
  }
}

答案 1 :(得分:0)

请参阅@Kevin的答案并重写下面的代码。

代码

import 'dart:collection';

class Process {
  var foo = 'foo';
}

class ProcessIterator implements Iterator<Process> {

  int i = 0;

  @override
  Process get current => new Process();
  @override
  bool moveNext() {
    if(i++ < 5) {
      return true;
    } else {
      return false;
    }
  }
}

// A mythical class that lets you iterate through all
// processes. Extends a subclass of [Iterable].
class Processes extends IterableBase<Process> {
  @override
  final Iterator<Process> iterator = ProcessIterator();
}

void main() {
  // Iterable objects can be used with for-in.
  for (var process in Processes()) {
    print(process.foo);
  }
}

控制台

foo
foo
foo
foo
foo