首页 > 解决方案 > Kotlin 中的这种语法是什么

问题描述

val (_,time) = time { Thread.sleep(1000) }

我看到左侧(LHS)有一个 val,所以它声明了一个变量。LHS 也有某种看起来不像 lambda 声明的函数语法。是什么(_,time)?你不需要给 LHS 上的时间打个类型吗?我非常了解 RHS:它是一个接受 lambda 作为参数并被命名为“时间”的函数。原始代码

标签: kotlin

解决方案


左侧称为解构

如果您尝试将数据类的实例(或任何class具有componentN函数的实例)分配给变量,则可以对其进行破坏。这意味着您可以将其内部分配给变量。_语法表明您不关心第一项。

例子:

class Foo(val first: String, val second: String) {

    operator fun component1() = first

    operator fun component2() = second
}

用法:

val (first, second) = Foo("first", "second")

如果你使用data classes 你不需要创建componentN函数,它们是为你生成的。

等效data class

data class Foo(val first: String, val second: String)

推荐阅读