Function 如何将函数传递到Kotlin中的数据类中?

Function 如何将函数传递到Kotlin中的数据类中?,function,kotlin,Function,Kotlin,当我在中运行以下命令时,它将打印错误,而不是其他内容。以下代码有什么问题?这很简单,我将一个函数作为初始化参数传递到数据类中,然后在数据类实例上调用这个函数。不允许将函数传递到Kotlin中的数据类中吗 data class Person(val name: String, val age: Int = 0, val showMsg : (msg: String) -> Unit) fun main(args: A

当我在中运行以下命令时,它将打印错误,而不是其他内容。以下代码有什么问题?这很简单,我将一个函数作为初始化参数传递到数据类中,然后在数据类实例上调用这个函数。不允许将函数传递到Kotlin中的数据类中吗

data class Person(val name: String,
                  val age: Int = 0,
                  val showMsg : (msg: String) -> Unit)


fun main(args: Array<String>) {
    val p = Person(name="Bob", age=29, {msg -> println(msg)})
    p.showMsg("Hello, world!")
}
数据类人员(val名称:字符串,
val年龄:Int=0,
val showMsg:(消息:字符串)->单位)
趣味主线(args:Array){
val p=Person(name=“Bob”,age=29,{msg->println(msg)})
p、 showMsg(“你好,世界!”)
}

这对我来说很好

data class Person(val name: String,
                  val age: Int = 0,
                  val showMsg : (String) -> Unit
)

val p = Person(name="Bob", age=29, showMsg = ::println)
p.showMsg("Hello, world!")

不能混合使用命名参数和定位参数。使用

fun main(args: Array<String>) {
    val p = Person(name="Bob", age=29, showMsg = {msg -> println(msg)})
    p.showMsg("Hello, world!")
}
fun main(args:Array){
val p=Person(name=“Bob”,age=29,showMsg={msg->println(msg)})
p、 showMsg(“你好,世界!”)
}

fun main(args:Array){
valp=Person(“Bob”,29,{msg->println(msg)})
p、 showMsg(“你好,世界!”)
}

您不能对其中两个参数使用命名参数,而忽略最后一个参数(lambda/function参数),您只需按如下方式命名最后一个参数

val p = Person(name="Bob", age=29, showMsg = {msg -> println(msg)})

对于其他答案中的解决方案,一个可行的替代方法是将最后一个参数lambda传递到括号外

如果函数将另一个函数作为最后一个参数,则lambda expression参数可以传递到带括号的参数列表之外。在这种情况下,不需要为其使用命名参数:

val p = Person(name = "Bob", age = 29) { println(it) }

如果你分享到你的游乐场的链接(使用保存功能),那会很酷。你会得到什么错误?Kotlin游乐场目前给了我
内部服务器错误
。它给了我“错误:”,仅此而已,没有其他。哈,这很容易。。。在上面停留了大约2个小时。下次使用IDE;)
val p = Person(name = "Bob", age = 29) { println(it) }