Kotlin:如何限制区块内的范围?

Ray*_*ang 3 kotlin

在Java中,可以使用花括号来描述具有自己范围的代码块:

void f() {
  {
    int x = 1
    // do something with x
  }

  // x not visible here anymore
}
Run Code Online (Sandbox Code Playgroud)

这怎么在Kotlin完成?

Moi*_*ira 7

您可以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
}
Run Code Online (Sandbox Code Playgroud)

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


{}不起作用,因为它创建一个lambda(从未实际调用过,所以它什么都不做).您可以{ foo }()使用创建lambda的开销立即调用它(),或者创建一个为您执行此操作的内联函数 - 这正是run它的作用.