【问题标题】:Kotlin: how to limit scope within a block?Kotlin:如何限制块内的范围?
【发布时间】:2018-07-18 04:53:54
【问题描述】:

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

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

  // x not visible here anymore
}

这是如何在 Kotlin 中完成的?

【问题讨论】:

  • 同样适用于 Kotlin
  • @Moira 是其中声明的任何变量的范围

标签: kotlin


【解决方案1】:

您可以为此目的使用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 所做的。

【讨论】:

  • 这比 java 更容易输入和理解。我永远不会认为这是一个带有 run 函数的奇怪类——我会立即意识到这只是一个作用域机制。我很高兴谷歌迫使我们改用这种不需要解释的美丽而明显的语言。
猜你喜欢
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 2016-03-23
  • 2021-03-05
相关资源
最近更新 更多