加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:03:05 所属栏目:安全 来源:网络整理
导读:我正在阅读 coming from SQL to Slick并且它声明使用===而不是==进行比较. 例如, people.filter(p = p.age = 18 p.name === "C. Vogt").run ==和===有什么区别,为什么后者在这里使用? 解决方法 ==调用equals, === 是光滑的自定义方法,用于列比较: def ===
我正在阅读 coming from SQL to Slick并且它声明使用===而不是==进行比较.

例如,

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

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

解决方法

==调用equals,===是光滑的自定义方法,用于列比较:

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,因为res0和res1指向两个不同的对象,在第二种情况下,res2等于res0,因为它们指向同一个对象.

在Slick列中,对象是抽象的,因此如果要查找column1 == column2,则需要检查列保持的值的相等性,而不是它们指向同一个对象. Slick然后可能在AST中的值相等中转换===(库.==是SqlOperator(“=”),n是左侧列和右侧),但Christopher可以更好地解释比我(如何,如何.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读