Dee*_*egC 4 overriding scala equals equals-operator
我正在编写一个生成SQL的DSL.加载表的语法是:
session.activateWhere( _.User.ID == 490 )
Run Code Online (Sandbox Code Playgroud)
这将从用户表中选择ID列为490.我可以使用"=="因为我可以覆盖"equals()"来生成正确的SQL.我的问题是"!="不起作用,因为它调用equals()然后否定结果.可悲的是,"!="是最终的,所以我无法覆盖它.在我的equals()方法中有什么方法可以告诉它是作为!=的一部分调用的吗?
我已经实现了一个"<>"操作,在逻辑上做与"!="相同的操作,它工作正常:
session.activateWhere( _.User.ID <> 490 )
Run Code Online (Sandbox Code Playgroud)
我的问题是,不仅"!="有效语法(对编译器而言),它将运行并生成与用户意图完全相反的语法.
正如你所说,!=是(同样==)最终的,所以不能被覆盖 - 有一个很好的理由.这就是大多数DLS ===用作替代方案的原因.
在==与!=运营商有很好的定义了Scala中的所有对象的意义.在我看来,改变某些物体的含义是非常危险的.
| 归档时间: |
|
| 查看次数: |
4928 次 |
| 最近记录: |