scala - 是否有将 Int 限制为范围的内置函数?

标签 scala

在 Scala 中,是否有优雅的方式将 Int 值限制在给定的 Range 范围内,这样如果该值超出了 Range 返回 Range 中最接近的值?

我可以编写一个函数来执行此操作,如下面的测试用例所示,但怀疑 Range 类或我忽略的其他地方一定有一些方法。

import org.scalatest.FunSuite
class RangeTest extends FunSuite {

  test("Range Experiments") {
    val range = 1 to 10

    def limit(n: Int) = (n max range.min) min (range.max) // Yuk!

    assert(1 === limit(-1))
    assert(1 === limit(0))
    for (i <- range)
      assert(i === limit(i))
    assert(10 === limit(11))
    assert(10 === limit(12))
  }

}

最佳答案

恐怕没有。 Range 旨在作为一个集合,而不是作为一个数学值,因此它提供了迭代等方法。您的 limit 函数看起来不错。您还可以考虑扩展(“拉皮条”)Range 类:

implicit class RangeOps(range: Range) {
  def limit(n: Int) = {
    (n max range.min) min range.max
  }
}

(0 to 10).limit(15)

关于scala - 是否有将 Int 限制为范围的内置函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52786265/

相关文章:

java - Eclipse:Scala 无法访问 Java 类成员 - 刚刚经过一些清理

scala - LISP 的代码即数据意识形态与高阶函数基本相同吗?

scala - 如何更改 StructType 的 StructField 中列的数据类型?

scala - 在这种情况下,scala 的类型检查如何工作?

java - 如何重构scala中的增量?

scala - 是否有更高级别的方法来编写自定义 GraphStage?

Scala 列出了 "var"的用法

java - Intellij Idea 为现有 Java 项目添加 Scala 支持

scala - Scala 中 TypedDataset 和类型界限的隐式编码器

class - 为什么 Scala 类中没有静态成员?