Я понял, что когда вы объявляете ссылку на объект функции как 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 не могут быть инфиксными, а инфиксные не являются частью ссылочной структуры / типа. Это просто не поддерживается или мне что-то здесь не хватает?
Какие-либо другие возможные решения для этого? Спасибо!