在Scalatest
編寫測試時我使用了所謂的Equality[A]
特質看起來如(文檔省略):有沒有一種方法能簡明寫匿名信subtrait只有一個抽象方法?
trait Equality[A] extends Equivalence[A] {
def areEqual(a: A, b: Any): Boolean
final def areEquivalent(a: A, b: A): Boolean = areEqual(a, b)
}
目前,我實現它如下
implicit def positionEquality: Equality[SomeType] = new Equality[SomeType] {
override def areEqual(a: SomeType, b: Any): Boolean = b match {
//actual code
}
}
但我希望把它寫更簡潔...像函數文字或一些。有沒有這樣的事情?
UPD:我只能想象一些隱式轉換,但它看起來是我必須明確,我想用的時候把它納入範圍相當怪異。與Any
object Equality {
def apply[T: ClassTag](fun: (a: T, b: T) => Boolean) = new Equality[T] {
override def areEqual(a: T, b: Any): Boolean = b match {
case t: T => fun(a, t)
case _ => false
}
}
}
implicit def positionEquality: Equality[SomeType] = Equality({case (a, b) => ???})
還是走Eq路線,讓編譯器幫助你:
匹配實際上並沒有正常工作。你需要'def爲此應用[T:ClassTag]'。 –
正確,反思。 – Reactormonk