为什么不能在Kotlin中指定var / val循环?

为什么你不能在Kotlin中为循环指定val或var类型。 例如,我希望能够做到

for (var i in 0...data.size - 1) { for (j in 0..bytes.size - 1) { bytes[j] = data[i++]//cant do i++ in current kotlin because "i" is val } //do stuff } 

但是,我必须这样做

  var i = 0 while (i < data.size) { for (j in 0..bytes.size - 1) { bytes[j] = data[i++] } //do stuff } 

您的示例与Java的典型示例for(int i=0;i<data.size;i++)稍有不同。 在Kotlin版本中,“i”实际上是范围的一个元素,在这种情况下,i ++没有任何意义。 它恰好是你所拥有的范围是一个索引列表。

您使用Kotlin for循环的方式与Java的foreach循环for(i : indexes)非常接近。

我认为,因为Kotlin是一种试图使得大多数函数式编程概念容易被尊重的语言,它倾向于禁止这种行为。 此外,您的初始代码可能遇到的一个可能的问题是,在字节数组比数据数组多的情况下,OutOfBoundException。