我已经花了一段时间在Google上搜索了非猫三重等于方法,但是除了Scalaz找不到任何东西。不幸的是,我无法在此库中计算出===
的导入。
有人可以帮忙,非常感谢。
答案 0 :(得分:5)
如果您只需要===
,则可以使用自己的功能很容易地模仿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
*/
答案 1 :(得分:4)
提供===
的另一个库是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
答案 2 :(得分:3)
使用===
的其他库例如是:
===
使用=
-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
,Map
等的实例可以在cats.instances.list._
,cats.instances.map._
,cats.instances.all._
或cats.implicits._
中找到(与上述规则相同) 。所有“普通”类型都应该有实例,但是如果您有自己的实例,则需要自己提供Eq
实例,或者使用类似Kittens的实例派生它。如果您缺少某些隐式(或者某些隐式是模棱两可的,因为您从2个不同的地方导入了相同的内容),则语法将无效。
与Scalaz相同,尽管导入和类型类将具有其他名称。
如果您不介意某些性能损失(由isInstanceOf
内部的equals
引起),并且缺乏关于相等性检查定义的灵活性,则可以使用@sachav的解决方案。
答案 3 :(得分:3)
关于scalaz试试
import scalaz._
import Scalaz._
42 === "hello" // error: type mismatch; found: String("hello") required: Int
其中
libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.2.28"