我花了一段时间在 Google 上搜索非 Cats 三等式方法,但除了 Scalaz 之外找不到任何东西。不幸的是,我一直无法解决===
这个库中的导入问题。
有人可以帮忙吗,非常感谢。
我花了一段时间在 Google 上搜索非 Cats 三等式方法,但除了 Scalaz 之外找不到任何东西。不幸的是,我一直无法解决===
这个库中的导入问题。
有人可以帮忙吗,非常感谢。
如果你只需要===
,你可以很容易地用你自己的函数模仿 Cats 的行为:
implicit class AnyWithTripleEquals[T](a: T) {
def ===(b: T): Boolean = a equals b
}
/*
scala> "2" === "3"
res0: Boolean = false
scala> "2" === 3
<console>:13: error: type mismatch;
found : Int(3)
required: String
"2" === 3
*/
另一个提供的库===
是scalactic,它基本上是 ScalaTest 使用的一组实用程序,它们被打包为一个单独的库。
import org.scalactic._
import TypeCheckedTripleEquals._
"Hello" === "Hello" //true
1 === "Hello" //won't compile
您还可以“配置”如何使用隐式解决您的相等性:
import org.scalactic._
import TripleEquals._
import StringNormalizations._
import Explicitly._
implicit val strEquality = decided by defaultEquality[String] afterBeing lowerCased
"Hello" === "hello" // true
"normalized" === "NORMALIZED" // true
关于scalaz尝试
import scalaz._
import Scalaz._
42 === "hello" // error: type mismatch; found: String("hello") required: Int
在哪里
libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.2.28"
在我的脑海中,其他使用的库===
是例如:
===
用于=
查询 - http://slick.lightbend.com/doc/3.3.1/queries.html===
检查断言和(通常)提出断言错误,有时会有一些不错的差异(我认为是最大规模的?)但它与 Cats/Scalaz 中的用例不同。
如果你想在 Cats 中使用它,你需要:
import cats.syntax.eq._
或import cats.syntax.all._
(import cats.implicits._
如果您重复导入语法,Scala 将无法解决它)A
你需要一个cats.Eq[A]
. List
s、 s 等的实例Map
可以在cats.instances.list._
、或cats.instances.map._
中找到(与上述规则相同)。所有“正常”类型都应该有实例,但是如果您有自己的实例,则需要自己提供实例或使用Kittens之类的东西派生它。cats.instances.all._
cats.implicits._
Eq
如果你遗漏了一些隐式(或者如果一些隐式是模棱两可的,因为你从 2 个不同的地方导入了相同的东西),那么语法将不起作用。
Scalaz 也是如此,尽管导入和类型类将有其他名称。
如果您不介意一些性能损失(由isInstanceOf
inside引起equals
)并且在相等检查的定义方面缺乏灵活性,您可以使用@sachav 的解决方案。