如何实现Iterable <E>

Gun*_*app 9 dart

我正在尝试将下面的Java代码移植到Dart,我很困惑这样做.

在Java中,Iterable接口是使用一种方法清理的地方,并且实现这一点非常简单.

这段代码如何最好地转换为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);
}

...
Run Code Online (Sandbox Code Playgroud)

Den*_*low 9

通过使用IterableMixin你只需要实现iterator-function.

class ChessSquares extends Object with IterableMixin<ChessSquare> {
    Iterator<ChessSquare> iterator() => new ChessSquaresIterator(bits);
    ...
}
Run Code Online (Sandbox Code Playgroud)

访问http://blog.sethladd.com/2013/03/first-look-at-dart-mixins.html,获取有关mixins的简短介绍.

Iterator-interface是直线前进.您只需要实现函数moveNext和getter current.