我想對金的回答詳細一點,並舉例說明如何實現函數值的有限可比性。
如果您對函數有某種描述性定義,可以在此描述中檢查相等性。例如,可以以下面的方式定義的簡單的算術函數的類(不是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}
採用這種設置,在一個ArthFun
由其類和構件所限定,可以檢查是否相等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)
這是一個不可解決的問題。 http://en.wikipedia.org/wiki/First-class_function#Equality_of_functions – missingfaktor