在for循环头中定义的变量范围

德拉甘·博扎诺维奇(Dragan Bozanovic)

我注意到以下Kotlin代码可以编译并成功执行:

for (i in 1..2) {
    val i = "a"
    print(i)
}

此打印aa但是,我没有找到允许这种可变阴影的决定背后的理由。我会说这不是一个好习惯,即使在Java中也是禁止的。

我认为Kotlin的设计师在改进Java语法并将其适应日常使用中所做的出色工作,因此我在这里一定会遗漏一些东西吗?

杰森·米纳德(Jayson Minard)

Kotlin不以任何方式限制可变阴影。基本原理很简单:“一致性”

由于您可以在其他大多数地方屏蔽变量,为什么只从允许的选项中排除一些循环变量呢?他们为什么如此特别?这是一个任意的区别。

任何作用域均可遮盖另一个作用域中使用的变量。不是一个好习惯,并且会产生编译器警告-但这是允许的。

如果您想与项目的贡献者进行对话,请尝试讨论论坛或闲暇频道,二者均从Kotlin社区页面链接否则,如果您认为这是一个错误,请向Kotlin YouTrack添加一个问题报告,您收到的答案也将是确定的。

同时,您可以自由编写无意义的代码,例如:

val i = 1
class Foo() {
    val i = "monkey"
    init { println(i) }
    @Test fun boo() {
        println(i)
        val i = i.length
        println(i)
        if (i == 6) {
            val i = Date(System.currentTimeMillis() + i) // Shadow warning
            println(i)
        }
        for (i in 0..i) {                                // Shadow warning
            val i = "chimp $i"                           // Shadow warning
            println(i)
        }
        InnerFoo()
    }
    class InnerFoo() {
        val i: Long = 100L
        init { println(i) }
    }
}

在Kotlin 1.0.3中哪个会产生3条警告。

警告:(15,21)Kotlin:阴影:i
警告:(18,18)Kotlin:名称被阴影:i
警告:(19,21)Kotlin:名称被阴影:i

并输出:



6
太阳年07月17 11时31分23秒UYT 2016
黑猩猩0
黑猩猩1
黑猩猩2
黑猩猩3
黑猩猩4
黑猩猩5
黑猩猩6
100

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

for循环自定义中的范围变量

来自分类Dev

JavaScript循环变量范围

来自分类Dev

for循环内变量的范围

来自分类Dev

在循环范围内定义变量还是应该超出范围?

来自分类Dev

C ++范围定义变量?

来自分类Dev

在php标头中使用自定义定义的变量

来自分类Dev

在for循环中声明的变量范围

来自分类Dev

在for循环内声明的变量范围

来自分类Dev

While与For循环中的变量范围

来自分类Dev

变量的范围以while循环结束

来自分类Dev

While与For循环中的变量范围

来自分类Dev

在for循环内声明的变量范围

来自分类Dev

在标头中声明变量并在.c中定义

来自分类Dev

在C的标头中定义别名类型的extern变量

来自分类Dev

C ++标头中extern变量的未定义引用

来自分类Dev

变量未定义,变量范围很奇怪

来自分类Dev

在while循环中定义变量

来自分类Dev

在循环之前或循环内定义变量

来自分类Dev

变量范围:内部或外部循环实例化

来自分类Dev

向量是成员变量的基于范围的for循环

来自分类Dev

for循环和迭代器变量的范围

来自分类Dev

bash变量-在while循环后了解范围

来自分类Dev

基于范围的for循环,无需指定变量类型

来自分类Dev

bash变量在for循环范围内

来自分类Dev

在for循环中声明的变量范围,javascript

来自分类Dev

shell中for循环控制变量的范围?

来自分类Dev

jQuery和JavaScript中的for循环变量的范围

来自分类Dev

Bash:使用tee的for循环中变量的范围

来自分类Dev

嵌套 jQuery 循环中的变量范围