gpt4 book ai didi

scala - 移动范围的函数

转载 作者:行者123 更新时间:2023-12-01 06:53:34 24 4
gpt4 key购买 nike

是否有一个现有的函数可以移动 Range 产生另一个 Range,比如

val r = 1 to 5
val s = r.map(_ + 2) // produces Vector(3, 4, 5, 6, 7)

我想得到 3 到 7

最佳答案

下面是我将如何实现它:

implicit class RangeHasShift(val r: Range) extends AnyVal {
def shift(n: Int): Range = {
val start1 = r.start + n
val end1 = r.end + n

// overflow check
if ((n > 0 && (start1 < r.start || end1 < r.end)) ||
(n < 0 && (start1 > r.start || end1 > r.end)))
throw new IllegalArgumentException(s"$r.shift($n) causes number overflow")

if (r.isInclusive)
new Range.Inclusive(start1, end1, r.step)
else
new Range (start1, end1, r.step)
}
}

def check(r: Range) = assert(r == r.shift(123).shift(-123))

check(1 to 10)
check(1 to -1)
check(1 to -1 by -1)
check(1 to 10 by 3)
check(1 until 10)
check(1 until -1)
check(1 until -1 by -1)
check(1 until 10 by 3)

我想知道这是否存在于 API 的某处?

关于scala - 移动范围的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23194485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com