实现原理

范围实现了一个标准库中的公共接口:ClosedRange<T>。

ClosedRange<T>表示一个数学意义上的闭区间,接口被定义来展现可比较类型的闭区间。它有两个端点:start、endInclusive(被包含在范围中)。主要的操作符是包含,通常使用in/!in操作符。

部分类型数列(IntProgression , LongProgression , CharProgression)表示一个等差数列。数列被定义为first、last、非零step。第一个元素就是first,随后的元素就是前一个元素加上step。最后一个元素总是受到迭代影响除非数列是空的。

一个数列就是Iterable<N>的子类型,N分别代表Int、Long、Char。因此数列可以用在for循环中和map、filter函数等。数列的遍历等价于Java/JavaScript中的索引for循环变遍历:

for (int i = first; i != last; i += step) {
    // ...
}

对部分类型来说,操作符..会创建一个对象,该对象实现了ClosedRange<T>和*Progression接口。比如,IntRange实现了CloseRange<Int>接口,继承了IntProgression,所以IntProgression中定义的所有操作都可以在IntRange中使用。downTo()和step()函数的结果就是一个*Progression对象。

数列的创建使用fromClosedRange函数:

IntProgression.fromClosedRange(start, end, step)

数列的最后一个元素是计算出来的,最大值不会超过end(正数step)或者最小值不会小于end(负数step)。

results matching ""

    No results matching ""