gpt4 book ai didi

dart - 如何实现 Iterable

转载 作者:行者123 更新时间:2023-12-04 03:44:38 25 4
gpt4 key购买 nike

我正在尝试将下面的 Java 代码移植到 Dart 并且对这样做感到困惑。

在 Java 中,Iterable 接口(interface)是用一种方法清理的地方,实现这一点很容易。

这段代码如何最好地转换为 Dart?

/**
* Chess squares represented as a bitmap.
*/
public class ChessSquares implements Iterable<ChessSquare> {

private static class ChessSquaresIterator implements Iterator<ChessSquare> {
long bits;
int nextBit;

public ChessSquaresIterator(long bits) {
this.bits = bits;
nextBit = Long.numberOfTrailingZeros(bits);
}

@Override
public boolean hasNext() {
return (nextBit < 64);
}

@Override
public ChessSquare next() {
ChessSquare sq = ChessSquare.values()[nextBit];
bits = bits & ~sq.bit;
nextBit = Long.numberOfTrailingZeros(bits);
return sq;
}

@Override
public void remove() {
throw new UnsupportedOperationException();
}
}


@Override
public Iterator<ChessSquare> iterator() {
return new ChessSquaresIterator(bits);
}

...

最佳答案

通过使用 IterableMixin你只需要实现 iterator -功能。

class ChessSquares with IterableMixin<ChessSquare> {
@override
Iterator<ChessSquare> get iterator => new ChessSquaresIterator(bits);
...
}

访问 http://blog.sethladd.com/2013/03/first-look-at-dart-mixins.html关于 mixin 的简短介绍。
Iterator - 界面直截了当。你只需要实现函数 moveNext和 setter/getter current .

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

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