scalaz.Equal[Foo] 的构造实现
Constructing Implementation of scalaz.Equal[Foo]
给出以下 class:
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@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)
发生了什么事?我不确定该声明如何 returns 和 Equal[Foo]
.
Equal.equal
的类型签名是 def equal[A](f: (A, A) => Boolean): Equal[A]
。因此,您传递的方法需要两个 Foo
并将 Boolean
返回给 equals
,后者返回 Equal[Foo]
的实例。这就是发生的事情,这就是声明 returns 和 Equal[Foo]
.
的方式
给出以下 class:
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@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)
发生了什么事?我不确定该声明如何 returns 和 Equal[Foo]
.
Equal.equal
的类型签名是 def equal[A](f: (A, A) => Boolean): Equal[A]
。因此,您传递的方法需要两个 Foo
并将 Boolean
返回给 equals
,后者返回 Equal[Foo]
的实例。这就是发生的事情,这就是声明 returns 和 Equal[Foo]
.