作者:月色清朗 | 来源:互联网 | 2023-02-02 10:36
我是Kotlin的初学者,这是我的代码:
class C(val boy: Int = 0) {
fun boy(i: Int) = i
}
fun girl(b1: Boolean, b2: Boolean) = println("boy($b1, $b2)")
fun main(args: Array): 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) // hey look at here
}
IntelliJ IDEA给了我:
unresolved reference: A
unresolved reference: B
unresolved reference: c
在线hey look at here
.
我认为我的代码在语法上是正确的,出了什么问题?
1> voddan..:
你难以理解一个非常罕见的句法模糊性案例.我认为这是SO的第一个,恭喜!
您的初始语法在技术上是正确的,但在此上下文中,它也可以被解释为尝试调用c.boy
.由于编译器不知道你的意思,它假设你想要函数调用.
最简单的解决方法是添加括号或重新排列表达式:
girl(c.boy
PS同样的事情可能发生在C#中,所以它并不是Kotlin独有的
实际上它是Kotlin的一个精彩设计.你还记得你在Java中如何调用泛型方法吗?仿制药在错误的地方`c.男孩(A)`?这是由同样的问题引起的.