Kotlin意想不到的“未解决的参考”

我是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

我认为我的代码在语法上是正确的,怎么了?

你难住一个语法模糊的罕见情况。 我认为这是第一个,恭喜!

您的初始语法在技术上是正确的,但是在这种情况下,它也可以被解释为尝试调用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 } 

但我仍然想知道为什么我的代码不起作用

编辑:看到另一个答案