我不知道我的代码有什么问题

时间:2020-08-13 09:21:46

标签: android-studio kotlin

这些天我正在学习基本的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说期待')',但我不知道为什么这不起作用

2 个答案:

答案 0 :(得分:3)

因此,基本上,您在调用Human()时弄乱了一个冒号。使用命名参数时,冒号用于指定var x: String = ""之类的类型name = value

参考:kotlin documentationkotlin 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的构造函数的参数无效部分。

tl; dr

这是错误的: 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