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

斯卡拉:有没有办法覆盖“不等于”(!=)?

发布时间:2020-12-16 18:02:05 所属栏目:安全 来源:网络整理
导读:我正在编写一个生成SQL的DSL.加载表的语法是: session.activateWhere( _.User.ID == 490 ) 这将从用户表中选择ID列为490.我可以使用“==”因为我可以覆盖“equals()”来生成正确的SQL.我的问题是“!=”不起作用,因为它调用equals()然后否定结果.可悲的是,
我正在编写一个生成SQL的DSL.加载表的语法是:

session.activateWhere( _.User.ID == 490 )

这将从用户表中选择ID列为490.我可以使用“==”因为我可以覆盖“equals()”来生成正确的SQL.我的问题是“!=”不起作用,因为它调用equals()然后否定结果.可悲的是,“!=”是最终的,所以我无法覆盖它.在我的equals()方法中有什么方法可以告诉它是作为!=的一部分调用的吗?

我已经实现了“<>”从逻辑上做与“!=”相同的操作,它运行正常:

session.activateWhere( _.User.ID <> 490 )

我的问题是,不仅“!=”有效语法(对编译器而言),它将运行并生成与用户意图完全相反的语法.

解决方法

如你所说,!=是(类似于==)final,所以不能被覆盖 – 这是有充分理由的.这就是大多数DLS使用===作为替代方案的原因.

==和!=运算符可以很好地定义Scala中所有对象的含义.在我看来,改变某些物体的含义是非常危险的.

(编辑:李大同)

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

    推荐文章
      热点阅读