scala – 为什么Slick需要使用三个等号(===)进行比较?
我正在阅读
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开始):
这意味着两个变量必须指向同一个对象才是相等的,例如: 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可以更好地解释比我(如何,如何. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |