代码之家  ›  专栏  ›  技术社区  ›  Ray Zhang

如何在一个块内限制作用域?

  •  2
  • Ray Zhang  · 技术社区  · 8 年前

    在Java中,可以使用大括号来描绘具有自己作用域的代码块:

    void f() {
      {
        int x = 1
        // do something with x
      }
    
      // x not visible here anymore
    }
    

    科特林是怎么做到的?

    1 回复  |  直到 8 年前
        1
  •  7
  •   Salem    8 年前

    你可以用 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,或者创建一个内联函数来实现这一点,这正是 运行 做。