val (_,time) = time { Thread.sleep(1000) }
我看到左侧(LHS)有一个val,因此它声明了一个变量。 LHS还具有某种类似于lambda声明的函数语法。什么是(_,time)
?您是否不必在LHS上输入时间?我非常清楚RHS:它是一个接受lambda作为参数的函数,名为“ time”。 Original code
答案 0 :(得分:4)
左侧称为destructuring。
如果您尝试将数据类的实例(或具有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 class
es,则不需要创建componentN
函数,它们是为您生成的。
等效的data class
:
data class Foo(val first: String, val second: String)