鉴于以下课程:
scala> class Foo(x: Int) { def getX = x }
defined class Foo
我创建了implicit Equal[Foo]
以便能够使用===
。
scala> implicit val FooEq: Equal[Foo] = Equal.equal(_.getX == _.getX)
FooEq: scalaz.Equal[Foo] = scalaz.Equal$$anon$7@6a246ad
有效。
scala> new Foo(10) === new Foo(10)
res2: Boolean = true
scala> new Foo(10) === new Foo(4545)
res3: Boolean = false
但是,我对如何创建FooEq
感到困惑。
Equal.equal(_.getX == _.getX)
发生了什么?我不确定该语句如何返回Equal[Foo]
。
答案 0 :(得分:1)
Equal.equal
的类型签名是def equal[A](f: (A, A) => Boolean): Equal[A]
。因此,您传递的方法需要花费两个Foo
s并将Boolean
返回给equals
,这会返回Equal[Foo]
的实例。那是什么,以及该陈述如何返回Equal[Foo]
。