gpt4 book ai didi

dart - 如何在 Dart 中实现 Iterable

转载 作者:行者123 更新时间:2023-12-04 19:09:32 29 4
gpt4 key购买 nike

我仍然不明白如何在 Dart 中处理 Iterable/Iterator。

我想我必须放弃并简单地返回列表,但这不是我想要的,因为它会
在我的情况下导致表现不佳。

我想要的是了解如何实现我自己的 Iterable/Iterator。

为什么这两种尝试都失败了?

library foo;

import 'dart:collection';

// Both attemps below raises the following error:
// ==============================================
//
// Closure call with mismatched arguments: function 'moveNext'
//
// NoSuchMethodError: incorrect number of arguments passed to method named 'moveNext'
// Receiver: Closure: (dynamic) => Iterator<int> from Function 'iterator':.
// Tried calling: moveNext()


main() {
Iterable<int> iterable1 = new OddsIterableDartStyle([1,2,4,6,7,8,9]);
for (int i in iterable1)
print("ODD: $i");

Iterable<int> iterable2 = new OddsIterableJavaStyle([1,2,4,6,7,8,9]);
for (int i in iterable2)
print("ODD: $i");
}

// ------------------------------------------

class OddsIterableDartStyle extends Object with IterableMixin<int> {
List<int> _ints;

OddsIterableDartStyle(this._ints);

Iterator<int> iterator() {
return new OddsIterator(this);
}
}

// ------------------------------------------

class OddsIterableJavaStyle implements Iterable<int> {
List<int> _ints;

OddsIterableJavaStyle(this._ints);

Iterator<int> iterator() {
return new OddsIterator(this);
}

}

// ------------------------------------------

class OddsIterator implements Iterator<int> { // Iterate over odd numbers
List<int> _ints;
int _index;

OddsIterator(this._ints) {
_index = -1;
}

bool moveNext() {
while (++_index < _ints.length) {
if (_ints[_index].isOdd)
return true;
}
return false;
}

int get current => (_index < 0) ? null : _ints[_index];
}

最佳答案

我看到两个直接的问题:

  • iterator是 setter/getter 。代码不应读取 Iterator<int> iterator() { ... } ,应该是Iterator<int> get iterator { ... }反而。
  • 您的迭代器期待底层整数列表,但您正在传递包装器。您可能想要构建您的迭代器,如 new OddsIterator(_ints) , 不像 new OddsIterator(this) .

  • 顺便说一句, Iterator应该返回 null如果您调用 current而你已经超越了终点。

    关于dart - 如何在 Dart 中实现 Iterable<E>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546112/

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