检查范围是否在Scala中包含值的通用方法

问题描述 投票:3回答:1

我想编写一个通用类,该通用类包含一个范围的端点,但是该通用版本会引发编译错误:value >= is not a member of type parameter A

final case class MinMax[A <: Comparable[A]](min: A, max: A) {
  def contains[B <: Comparable[A]](v: B): Boolean = {
    (min <= v) && (max >= v)
  }
}

特定版本按预期工作:

final case class MinMax(min: Int, max: Int) {
  def contains(v: Int): Boolean = {
    (min <= v) && (max >= v)
  }
}

MinMax(1, 3).contains(2) // true
MinMax(1, 3).contains(5) // false
scala generics typeclass
1个回答
6
投票

你太近了。

Scala中,我们有Ordering,它是Ordering,用来表示可以比较相等且小于或大于的类型。

因此,您的代码可以这样写:

typeclass
© www.soinside.com 2019 - 2024. All rights reserved.