Может ли перегрузка операторов сравнения в 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 – это общий язык программирования, представляющий собой сочетание OOP и FP, а не язык, специфичный для домена. Котлин, как правило, решает задачу функциями, а не операторами / языковыми конструкциями. Например, kotlin использует функцию filter для достижения того, что делает SQL, where это делается.

Однако некоторые из этих функций фактически являются mimmening встроенными языковыми конструкциями.

 fooCollection.filter {it.bar > 0} 

В приведенном выше коде fooCollection представляет собой Collection<Foo>Foo – POJO / java bean, отображаемый из записи вашей таблицы foo ).

Если вы не знаете, что я написал выше, пожалуйста, дайте мне знать, комментируя ниже.

Intereting Posts
Сложить список для сопряжения с назначением деструктуризации в котлин Дооснащение 2 Длина содержимого RequestBody больше, чем размер файла NullPointerException в Android Studio 3 Beta 1 JaVers обнаруживает изменения в childs, если изменяется свойство simple в корневом объекте Разница между типами и val для объекта Kotlin: Оператор '==' не может применяться к 'kotlin.Int' и 'Person?' ошибка kotlin: общий для разных типов Факториал с использованием цикла `for` в Котлине Слушатель не вызывается, когда запрашивается диалоговое окно «Обновление сервисов Google Play» Как вернуть исключение зависимостей модуля в Intellij (после ложной проверки кода) Объект базы данных Singleton с параметризованной инициализацией при запуске? У меня ошибка в android с Kotlin Делегат Kotlin с MultiDex на Android ниже 21 делегировать вложенную закрытую закрытие соответствующего класса Использование переменной из другого файла Kotlin