Kotlin Ranges:为什么没有`downTo`变体来排除最后一个项目,例如`until`?

时间:2019-09-07 14:59:11

标签: kotlin

在递减循环时,是否有声明性的工作来排除最后一个项目,例如使用downTo

1 个答案:

答案 0 :(得分:0)

虽然kotlin标准库不包含此实用程序,但是您可以为此定义自己的扩展功能。

看一下stdlib,直到的一个定义是:

/**
 * Returns a range from this value up to but excluding the specified [to] value.
 * 
 * If the [to] value is less than or equal to `this` value, then the returned range is empty.
 */
public infix fun Int.until(to: Int): IntRange {
    if (to <= Int.MIN_VALUE) return IntRange.EMPTY
    return this .. (to - 1).toInt()
}

因此,我们可以定义

infix fun Int.downUntil(to: Int): IntProgression {
    if (to >= Int.MAX_VALUE) return IntRange.EMPTY
    return this downTo (to + 1).toInt()
}

您可能还想定义此函数的版本以在其他基元上进行操作。