我想稍微扩展一下 Kim 的回答,并举例说明如何实现函数值的有限可比性。
如果您对函数有某种描述性定义,则可以检查此描述的相等性。例如,您可以通过以下方式定义简单算术函数的类(不是 oo 类):
sealed trait ArthFun extends (Double => Double)
case class Mult(x: Double) extends ArthFun {def apply(y: Double) = x * y}
case class Add(x: Double) extends ArthFun {def apply(y: Double) = x + y}
使用此设置,其中 anArthFun
由其类和成员定义,您可以ArthFun
仅通过案例类定义的对象相等性来检查类型值的相等性。
scala> trait ArthFun extends (Double => Double)
defined trait ArthFun
scala> case class Mult(y: Double) extends ArthFun { def apply(x: Double) = x * y; override def toString = "*" + y}
defined class Mult
scala> case class Add(y: Double) extends ArthFun { def apply(x: Double) = x + y; override def toString = "+" + y }
defined class Add
scala> Seq(Mult(5),Mult(4),Add(4),Add(3),Mult(5)).distinct
res4: Seq[Product with ArthFun with Serializable] = List(*5.0, *4.0, +4.0, +3.0)