如何实现“ Dart库之旅”中的迭代示例?
我知道这是必须补充的代码,但是我该如何补充呢?
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个类型的参数。
最诚挚的问候,
答案 0 :(得分:1)
两件事。
1)Process
在网络上不可用,因此您的DartPad示例不起作用。
2)IterableBase
在dart: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