这些天我正在学习基本的kotlin。
class Human (val name : String = "Anonymous") {
fun drinkingCoffee() {
println("this is so good")
}
}
fun main() {
var human = Human(name: "jinhwa") // error is here.
human.drinkingCoffee()
println("this is human's name is ${human.name}")
}
android studio说期待')',但我不知道为什么这不起作用
答案 0 :(得分:3)
因此,基本上,您在调用Human()
时弄乱了一个冒号。使用命名参数时,冒号用于指定var x: String = ""
之类的类型name = value
参考:kotlin documentation,kotlin by example
完整代码:
class Human(val name: String = "Anonymous") {
fun drinkingCoffee() {
println("this is so good")
}
}
fun main() {
var human = Human(name = "jinhwa") // error is here.
human.drinkingCoffee()
println("this is human's name is ${human.name}")
}
答案 1 :(得分:1)
这里的问题是class Human
的构造函数的参数无效部分。
这是错误的: Human(name : "jinhwa")
这是正确的: Human(name = "jinhwa")
在调用构造函数时,不必给出特定参数的名称,特别是在只有一个参数的情况下,但是您可以做到这一点。
如果这样做,请在代码中用冒号标记的地方写上等号。
您的情况下的有效构造函数调用是
Human()
Human("jinhwa")
Human(name = "jinhwa")
下面的代码使用您的class Human
...
fun main() {
var defaultConstructedHuman = Human()
var withparamNameConstructedHuman = Human(name = "jinhwa")
var withoutParamNameConstructedHuman = Human("Arthur")
println("this human's name is ${defaultConstructedHuman.name}")
println("this human's name is ${withparamNameConstructedHuman.name}")
println("this human's name is ${withoutParamNameConstructedHuman.name}")
}
代码将运行。
如果您创建一个Human
而不传递名称,它也会运行,结果将是一个Anonymous
:
fun main() {
var human = Human() // nothing passed, "name" takes the default value "Anonymous"
human.drinkingCoffee()
println("this is human's name is ${human.name}")
}
...将编译并输出
this human's name is Anonymous
this human's name is jinhwa
this human's name is Arthur