Kotlin неожиданная `неразрешенная ссылка`

Я новичок в Котлине, и вот мой код:

class C(val boy: Int = 0) { fun <T, E> boy(i: Int) = i } fun girl(b1: Boolean, b2: Boolean) = println("boy($b1, $b2)") fun main(args: Array<String>): Unit { val A = 234 // see? A defined! val B = 345 // see? B defined! val c = C(123) // c is also defined! girl(c.boy < A, B > A) // hey look at here } 

IntelliJ IDEA дает мне:

  • unresolved reference: A
  • unresolved reference: B
  • unresolved reference: c

На линии hey look at here .

Я думаю, что мой код синтаксически правильный, что случилось?

Вы столкнулись с очень редким случаем синтаксической двусмысленности. Я думаю, что это первый для SO, поздравляю!

Ваш исходный синтаксис технически корректен, но в этом контексте его также можно интерпретировать как попытку вызвать c.boy<A,B> . Поскольку компилятор не знал, что вы имели в виду, он предположил, что вам нужен вызов функции.

Самое простое исправление заключается в добавлении скобок в том виде, в каком вы это сделали, или переупорядочении выражений:

 girl(c.boy < A, A < B) 

PS То же самое может произойти в C #, поэтому он не уникален для Kotlin

Ну .. Я решил эти ошибки, добавив пару фигурных скобок:

 fun main(args: Array<String>): Unit { val A = 234 val B = 345 val c = C(123) girl((c.boy < A), B > A) // hey look at here } 

Но я все еще удивляюсь, почему мой код выше не работает

Изменить: см. Другой ответ