gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:36:23 25 4
gpt4 key购买 nike

我正在阅读 coming from SQL to 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)

使用问题 ==对于对象是这样的(来自 this question ):

Default implementation of equals() class provided by java.lang.Object compares memory location and only return true if two reference variable are pointing to same memory location i.e. essentially they are same object.



这意味着两个变量必须指向同一个对象才能相等,例如:
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 右侧),但克里斯托弗比我能更好地解释这一点。

关于scala - 为什么 Slick 需要使用三个等号 (===) 进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com