可以使用Kotlin中的比较运算符重载来实现类似于SQL的功能吗?

Kotlin有限的运算符超载。 我正在包装一个基于矢量的操作的API,因为它们是用R,Julia,APL等语言完成的。最常见的例子是在SQL中,你可以说:

select * from foo where bar > 3; 

使得每个记录都被单独评估,并且如果通过比较则被添加到结果集。 在Kotlin中,比较运算符重载与compareTo方法相关联:

 Expression Translated to a > b a.compareTo(b) > 0 a < b a.compareTo(b) < 0 a >= b a.compareTo(b) >= 0 a <= b a.compareTo(b) <= 0 All comparisons are translated into calls to compareTo, that is required to return Int. 

所以在我看来,没有办法使用操作符重载来表示一个向量为导向的比较操作。 我错过了什么吗?

解决方法是使用infix关键字创建函数,如:

 infix fun greaterThan(x: Int)... 

可以这样调用:

 where(bar greaterThan 3) 

但是这不是很清楚

Kotlin确实有这些功能,但不是你想象中的形式。 Kotlin是一种通用的编程语言,它是OOP和FP的混合,而不是域特定的语言。 Kotlin倾向于通过功能来解决事物,而不是操作者/语言构造。 例如,kotlin使用filter函数来实现SQL where子句所做的事情。

然而其中一些功能实际上是在模仿内建的语言结构。

 fooCollection.filter {it.bar > 0} 

在上面的代码中, fooCollection是一个Collection<Foo> (而Foo是从你的表foo记录映射的POJO / java bean)。

如果您不清楚我上面发布的任何内容,请通过下面的评论告诉我。