为什么Slick需要使用三个等号(===)进行比较?

我正在阅读从SQL到Slick的全部内容,并且指出要使用===而不是==进行比较。

例如,

people.filter(p => p.age >= 18 && p.name === "C. Vogt").run

==之间有什么区别===,为什么在这里使用后者?

结束新

==调用equals===是slick中一个自定义定义的方法,用于列比较:

def === [P2, R](e: Column[P2])(implicit om: o#arg[B1, P2]#to[Boolean, R]) =
  om.column(Library.==, n, e.toNode)

使用==对象的问题是(从这个问题开始):

java.lang.Object提供的equals()类的默认实现比较内存位置,并且仅当两个引用变量指向同一内存位置(即,它们实质上是同一对象)时才返回true。

这意味着两个变量必须指向相同的对象才能相等,例如:

scala> class A
defined class A

scala> new A
res0: A = A@4e931efa

scala> new A
res1: A = A@465670b4

scala> res0 == res1
res2: Boolean = false

scala> val res2 = res0
res2: A = A@4e931efa

scala> res2 == res0
res4: Boolean = true

在第一种情况下==返回false是因为res0res1指向两个不同的对象,在第二种情况下res2则等于res0因为它们指向同一对象。

在Slick中,列是对象中的抽象对象,因此拥有column1 == column2的不是您要查找的内容,因此您想检查是否相等于列保持的值,而不是检查它们是否指向同一对象。然后,Slick可能===用AST中的一个值相等来解释这一点Library.==SqlOperator("=")n是左侧的一列,e是右侧的一),但是Christopher可以比我更好地解释这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么将三个变量与==进行比较得出false?

来自分类Dev

为什么Python需要进行丰富的比较?

来自分类Dev

使用jQuery进行日期比较

来自分类Dev

使用Javascript进行日期比较

来自分类Dev

使用AVX与NaN进行比较

来自分类Dev

使用python进行逐月比较

来自分类Dev

与使用linq的列表进行比较

来自分类Dev

使用数组进行awk比较

来自分类Dev

使用awk进行列比较

来自分类Dev

使用三向diff进行比较

来自分类Dev

为什么不能与比较结果进行比较?

来自分类Dev

Lua为什么要进行比较呢?

来自分类Dev

为什么不进行比较就返回假?

来自分类Dev

为什么NULL需要使用块进行类型转换?

来自分类Dev

使用通用比较器进行字符串比较

来自分类Dev

PostgreSQL - 帮助将两个表与三个特定列进行比较

来自分类Dev

在Java 8中将一个日期与三个或三个以上的日期进行比较?

来自分类Dev

为什么不能将int与null进行比较,但可以将Integer与null进行比较

来自分类Dev

比较 2 个 XML 并进行排序

来自分类Dev

通过循环一次将R中的三个(或更多)变量与ifelse进行比较

来自分类Dev

如何遍历三个或更多列表,并将每个列表与每个元素进行比较?

来自分类Dev

将 Python pandas 中的三个数据框与重复条目进行比较

来自分类Dev

将两个数组 php 与第三个数组进行比较

来自分类Dev

使用JPA条件API进行日期比较

来自分类Dev

iOS:使用NSDate进行比较的NSPredicate

来自分类Dev

使用“ ==”与null进行比较是否安全?

来自分类Dev

XQuery:如何使用日期并进行比较

来自分类Dev

使用比较器对NSDictionaries的NSArray进行排序

来自分类Dev

如何使用比较器对ArrayList进行排序?

Related 相关文章

热门标签

归档