[英]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.