Kotlin是否有范围分隔符?

时间:2018-04-13 18:02:56

标签: scope kotlin

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

例如:

int myfunc()
{
    int i = 4;

    {
        int j = 5;
        i = i + j;
        ...
    }
    ...
}

在此示例中, {} 会创建一个新范围,因此无法在 j 之外看到 j strong> {和}

Kotlin支持吗?

2 个答案:

答案 0 :(得分:4)

它没有,因为这个语法创建了一个lambda表达式(然后没有赋值给任何东西,并且永远不会被调用)。

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

var i = 0
{
    i++
}
println(i) // 0

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

var i = 0
val f: () -> Int = { 
    i++ 
}
f()
println(i) // 1

或者以JavaScript-ish风格立即调用它,这可能会被某些人不赞成:

var i = 0
{
    i++
}()
println(i) // 1

答案 1 :(得分:4)

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

var i = 0
run {
  i++
}
println(i)