我深入了解IntRange
类声明
public class IntRange(start: Int, endInclusive: Int) : IntProgression(start, endInclusive, 1), ClosedRange<Int>
IntProgression
和ClosedRange
似乎都未实现Iterator
接口。
因此,令我惊讶的是IntRange
对象可以访问Iterator
之类的forEach
函数。那怎么会神奇地发生呢?
public inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {
for (element in this) action(element)
}
答案 0 :(得分:5)
这里绝对没有魔术。 IntRange
是implements the Iterable interface的IntProgression
的子类。您可以查看实现here的源代码。
答案 1 :(得分:1)
IntProgression和ClosedRange似乎都未实现Iterator接口。
由于forEach
函数位于Iterable
上,因此他们需要实现Iterable
,而IntProgression
可以做到:
open class IntProgression : Iterable<Int>