我還沒有理解如何處理Dart中的Iterable/Iterator。如何在dart中實現Iterable <E>?
我想我不得不放棄並簡單地返回列表,但這不是我想要的,因爲它會導致我的情況下性能不佳, 。
我想要的是瞭解如何實現我自己的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];
}
也許值得把這個問題的標題改爲「我該如何實現Iterable?」。 – 2013-05-14 21:12:59
請開始接受幫助你的答案。你有12個問題,而且他們中沒有一個人有可接受的答案。 – MarioP 2013-05-15 09:03:27
我現在明白我可以接受答案! – 2013-05-16 13:13:48