了解 Kotlin 函数

问题描述 投票:0回答:1

我在理解 Kotlin 类时遇到一些问题。

internal class TransformingSequence<T, R>
constructor(private val sequence: Sequence<T>, private val transformer: (T) -> R) : Sequence<R> {
    override fun iterator(): Iterator<R> = object : Iterator<R> {
        val iterator = sequence.iterator()
        override fun next(): R {
            return transformer(iterator.next())
        }

        override fun hasNext(): Boolean {
            return iterator.hasNext()
        }
    }

    internal fun <E> flatten(iterator: (R) -> Iterator<E>): Sequence<E> {
        return FlatteningSequence<T, R, E>(sequence, transformer, iterator)
    }
}

在上面的代码中,我不明白 iterator() 函数在做什么。看起来该函数继承自 Iterator 接口,并返回一个继承 Iterator 接口的对象(?)...?我不明白 'val iterator =equence.iterator()' 的含义。有人可以帮忙吗? 预先感谢您。

kotlin generics interface
1个回答
0
投票

这是一个对象表达式。它创建

Iterator
接口的匿名实现并返回此类的实例。

花括号内有一个标准的类定义,它可以从外部范围访问变量。因此,

val iterator = sequence.iterator()
只是在这个类中创建一个属性。

此代码相当于:

internal class TransformingSequence<T, R>
constructor(private val sequence: Sequence<T>, private val transformer: (T) -> R) : Sequence<R> {
    override fun iterator(): Iterator<R> = MyIterator(sequence, transformer)

        ...
}

class MyIterator<T, R>(
    sequence: Sequence<T>,
    private val transformer: (T) -> R
) : Iterator<R> {
    val iterator = sequence.iterator()
    override fun next(): R {
        return transformer(iterator.next())
    }

    override fun hasNext(): Boolean {
        return iterator.hasNext()
    }
}

从高层角度来看,此类将一个迭代器包装在另一个迭代器中,并动态转换所有项目。

© www.soinside.com 2019 - 2024. All rights reserved.