Kotlin:如何在一个区块内限制范围?

时间:2018-07-17 20:35:32

标签: kotlin

在Java中,可以使用花括号来定义具有自己作用域的代码块:

def __str__(self):
    return '{} : {}'.format(Point.__str__(self), self.label)

这在科特林如何完成?

1 个答案:

答案 0 :(得分:6)

您可以将run用于此目的:

  

inline fun <R> run(block: () -> R): R (source)
  调用指定的功能块并返回其结果。

     

kotlin.run   

fun f() {
    run {
        val x = 1
        // do something with x
    }
    // x not visible here anymore
}

这是一个内联函数(就像Kotlin中的许多其他语言构造函数一样),因此在性能方面它等效于Java代码。


{}不起作用,因为它创建了一个lambda(它从未被实际调用,因此它什么也不做)。您可以立即调用({ foo }()来进行创建Lambda的开销,也可以创建一个内联函数为您执行此操作-这正是run的作用。