Kotlin 有作用域分隔符吗?

use*_*535 2 scope kotlin

在 C 中,可以使用{}作为范围分隔符。

例如:

int myfunc()
{
    int i = 4;

    {
        int j = 5;
        i = i + j;
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,{}创建了一个新的作用域,因此在{}之外无法看到j

Kotlin 支持这个吗?

zsm*_*b13 5

它不会,因为此语法创建了一个 lambda 表达式(然后它不会被分配给任何东西,也不会被调用)。

所以这段代码对 的初始值没有任何作用i

var i = 0
{
    i++
}
println(i) // 0
Run Code Online (Sandbox Code Playgroud)

但是,您可以将 lambda 分配给变量并调用它:

var i = 0
val f: () -> Int = { 
    i++ 
}
f()
println(i) // 1
Run Code Online (Sandbox Code Playgroud)

或者立即以类似 JavaScript 的风格调用它,这可能会被一些人反对:

var i = 0
{
    i++
}()
println(i) // 1
Run Code Online (Sandbox Code Playgroud)


Ego*_*gor 5

添加到@zsmb13 的答案中,您可以查看作用域函数(Standard.kt)。在 Kotlin 中创建作用域的惯用方法是:

var i = 0
run {
  i++
}
println(i)
Run Code Online (Sandbox Code Playgroud)