我注意到以下Kotlin代码编译并成功执行:
for (i in 1..2) {
val i = "a"
print(i)
}
Run Code Online (Sandbox Code Playgroud)
这打印aa.但是,我没有找到允许这种变量阴影的决定背后的理由.我会说这不是一个好习惯,即使在Java中也是禁止的.
我认为Kotlin设计师在改进Java语法方面做了很多工作,并将其应用到日常实际应用中,所以我必须在这里遗漏一些东西?
Jay*_*ard 10
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) }
}
}
Run Code Online (Sandbox Code Playgroud)
在Kotlin 1.0.3中产生了3个警告.
警告:(15,21)Kotlin:名字阴影:我
警告:(18,18)Kotlin:名字阴影:我
警告:(19,21)Kotlin:名字阴影:我
并输出:
猴子
猴子
6
太阳7月17日11:31:23 UYT 2016
黑猩猩0
黑猩猩1
黑猩猩2
黑猩猩3
黑猩猩4
黑猩猩5
黑猩猩6
100
| 归档时间: |
|
| 查看次数: |
2504 次 |
| 最近记录: |