Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中,除了Cats之外,还有任何triple equals===方法吗?_Scala_Equals_Scalaz_Scala Cats_Triple Equals - Fatal编程技术网

在Scala中,除了Cats之外,还有任何triple equals===方法吗?

在Scala中,除了Cats之外,还有任何triple equals===方法吗?,scala,equals,scalaz,scala-cats,triple-equals,Scala,Equals,Scalaz,Scala Cats,Triple Equals,我花了一段时间在谷歌上搜索一个非猫的三重相等方法,但除了Scalaz之外,我什么也找不到。不幸的是,我无法计算出此库中==的导入 有人能帮你吗,非常感谢。如果你只需要=,你可以很容易地用自己的功能模仿猫的行为: 隐式类AnyWithTripleEquals[T](a:T){ def==(b:T):布尔值=a等于b } /* scala>“2”=“3” res0:Boolean=false scala>“2”==3 :13:错误:类型不匹配; 发现:Int(3) 必需:字符串 "2" === 3

我花了一段时间在谷歌上搜索一个非猫的三重相等方法,但除了Scalaz之外,我什么也找不到。不幸的是,我无法计算出此库中
==
的导入


有人能帮你吗,非常感谢。

如果你只需要
=
,你可以很容易地用自己的功能模仿猫的行为:

隐式类AnyWithTripleEquals[T](a:T){
def==(b:T):布尔值=a等于b
}
/*
scala>“2”=“3”
res0:Boolean=false
scala>“2”==3
:13:错误:类型不匹配;
发现:Int(3)
必需:字符串
"2" === 3
*/

如果你只需要
=
,你可以很容易地用自己的功能模仿猫的行为:

隐式类AnyWithTripleEquals[T](a:T){
def==(b:T):布尔值=a等于b
}
/*
scala>“2”=“3”
res0:Boolean=false
scala>“2”==3
:13:错误:类型不匹配;
发现:Int(3)
必需:字符串
"2" === 3
*/

在我的脑海中,其他使用
=
的库包括:

  • Slick在查询中使用
    ===
    表示
    =
  • 测试框架中的匹配器,例如,使用
    ==
    检查断言,并(通常)引发断言错误,有时会出现一些细微的差异(我认为是scalatest?)
但它与Cats/Scalaz中的用例不同

如果你想在猫身上使用它,你需要:

  • 语法-
    导入cats.syntax.eq.\u
    导入cats.syntax.all.\u
    导入cats.implicits.\u
    (如果重复导入语法,Scala将无法解析)
  • 实例-如果比较2
    A
    ,则需要一个
    cats.Eq[A]
    的隐式实例。
    List
    s、
    Map
    s等的实例可以在
    cats.instances.List.\u
    cats.instances.Map.\u
    cats.instances.all.\u
    cats.implicits.\u
    中找到(与上述规则相同)。所有“正常”类型都应该有实例,但如果您有自己的实例,则需要自己提供
    Eq
    实例,或者使用类似的方法派生实例
如果您缺少一些隐式(或者如果一些隐式是不明确的,因为您从两个不同的地方导入了相同的内容),那么语法将不起作用

Scalaz也是这样,尽管导入和类型类将有其他名称


如果您不介意一些性能损失(由
isInstanceOf
内部
equals
引起)和平等检查定义缺乏灵活性,您可以使用@sachav的解决方案。

在我的头上,使用
=
的其他库包括:

  • Slick在查询中使用
    ===
    表示
    =
  • 测试框架中的匹配器,例如,使用
    ==
    检查断言,并(通常)引发断言错误,有时会出现一些细微的差异(我认为是scalatest?)
但它与Cats/Scalaz中的用例不同

如果你想在猫身上使用它,你需要:

  • 语法-
    导入cats.syntax.eq.\u
    导入cats.syntax.all.\u
    导入cats.implicits.\u
    (如果重复导入语法,Scala将无法解析)
  • 实例-如果比较2
    A
    ,则需要一个
    cats.Eq[A]
    的隐式实例。
    List
    s、
    Map
    s等的实例可以在
    cats.instances.List.\u
    cats.instances.Map.\u
    cats.instances.all.\u
    cats.implicits.\u
    中找到(与上述规则相同)。所有“正常”类型都应该有实例,但如果您有自己的实例,则需要自己提供
    Eq
    实例,或者使用类似的方法派生实例
如果您缺少一些隐式(或者如果一些隐式是不明确的,因为您从两个不同的地方导入了相同的内容),那么语法将不起作用

Scalaz也是这样,尽管导入和类型类将有其他名称


如果您不介意一些性能损失(由
isInstanceOf
内部
equals
引起)和平等检查定义缺乏灵活性,您可以使用@sachav的解决方案。

另一个提供
==
的库是,它基本上是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

另一个提供
=
的库是,它基本上是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

在哪里

关于scalaz尝试

import scalaz._
import Scalaz._

42 === "hello" // error: type mismatch; found: String("hello") required: Int

在哪里


TypeCheckedTripleEquals.\可能是编译时检查所必需的。谢谢,希望这有一个用于比较选项[String]sTypeCheckedTripleEquals的导入。\可能是编译时检查所必需的。谢谢,希望这有一个用于比较选项[String]的导入。这很好,谢谢,只是我在代码中运行WartRemove,equals被禁用,以及==这太好了谢谢你,只是我在代码中运行WartRemove,equals被禁用,以及==你想解决什么问题?为什么要查找
===
的用法?如果你能详细阐述你的问题,你可能会得到更相关的答案。你想解决什么问题?为什么要查找
===
的用法?如果你能详细阐述你的问题,你可能会得到更相关的答案。