Kotlin инфиксных функций как объектов первого класса не поддерживаются? - PullRequest
0 голосов
/ 12 июля 2020

Я понял, что когда вы объявляете ссылку на объект функции как val или var, вы не можете объявить ее как инфикс.

Если вы объявляете функцию с fun, вы можете объявить ее как инфикс, но вы не может присвоить ему другую ссылку на функцию. Если я прав, это кажется мне огромным упущением. Да мог как-нибудь? вложить объявление в функцию более высокого порядка, но это не то, что я хочу.

Подводя итог:

infix fun Int.foo(x:Int)  { println(this+x) }
infix fun Int.boo(x:Int)  { println(this+x+1) }

fun main() {
    var coo: Int.(Int) -> Unit = Int::foo // allowed & works
    1 foo 1 // 2
    1.coo(1) // 2
    coo = Int::boo
    1.coo(1) // 3
    // No way to assign to Int::foo - error
    Int::foo = Int:boo 
    1 foo 1 // 3?

Итак, я искал что-то вроде:

    infix var coo: Int.(Int) -> Unit = Int::foo

или

    var coo: infix Int.(Int) -> Unit = Int::foo

Очевидно, объявления функций var / val не могут быть инфиксными, а инфиксные не являются частью ссылочной структуры / типа. Это просто не поддерживается или мне что-то здесь не хватает?

Какие-либо другие возможные решения для этого? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...