[英]Are there any triple equals === methods outside of Cats in Scala?
我花了一段时间在Google上搜索了非猫三重等于方法,但除了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
在我的头上,其他使用===
库例如:
===
用于=
-http: //slick.lightbend.com/doc/3.3.1/queries.html ===
来检查断言和(通常)引发断言错误,有时会产生一些差异(我认为是scalatest吗?) 但这与Cats / Scalaz中的用例不同。
如果要在Cats中使用它,则需要:
import cats.syntax.eq._
或import cats.syntax.all._
或import cats.implicits._
(如果重复导入语法,Scala将无法解决它) A
,则需要cats.Eq[A]
的隐式实例。 List
, Map
等等的实例可以在cats.instances.list._
, cats.instances.map._
, cats.instances.all._
或cats.implicits._
(与上述规则相同)。 所有“普通”类型都应该有实例,但是如果您有自己的实例,则需要自己提供Eq
实例,或者使用Kittens之类派生它。 如果您缺少一些隐式(或者某些隐式是模棱两可的,因为您从2个不同的地方导入了相同的内容),则该语法将不起作用。
关于Scalaz的事情也一样,尽管导入和类型类将具有其他名称。
如果您不介意性能下降(由isInstanceOf
内部equals
引起)并且缺乏关于相等性检查定义的灵活性,则可以使用@sachav的解决方案。
关于scalaz尝试
import scalaz._
import Scalaz._
42 === "hello" // error: type mismatch; found: String("hello") required: Int
哪里
libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.2.28"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.