IntRange对象如何访问Iterator函数,例如每次?

时间:2018-07-13 08:29:11

标签: kotlin

我深入了解IntRange类声明

public class IntRange(start: Int, endInclusive: Int) : IntProgression(start, endInclusive, 1), ClosedRange<Int>

IntProgressionClosedRange似乎都未实现Iterator接口。

因此,令我惊讶的是IntRange对象可以访问Iterator之类的forEach函数。那怎么会神奇地发生呢?

public inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {
    for (element in this) action(element)
}

2 个答案:

答案 0 :(得分:5)

这里绝对没有魔术。 IntRangeimplements the Iterable interfaceIntProgression的子类。您可以查看实现here的源代码。

答案 1 :(得分:1)

  

IntProgression和ClosedRange似乎都未实现Iterator接口。

由于forEach函数位于Iterable上,因此他们需要实现Iterable,而IntProgression可以做到:

open class IntProgression : Iterable<Int>