重写从Java到Scala的'for'循环

Ezh*_*hik 4 for-loop scala

我需要将一些Java代码转换为Scala.我有这样的来源.如何在Scala中重写它?问题可能很简单.但它在文档中的(i < - 1到10){}示例中更难匹配.

for (int i = password.length(); i != 0; i >>>=1)
  { some code }
Run Code Online (Sandbox Code Playgroud)

金问候,阿列克谢

Rex*_*err 6

如果你想让它尽可能快 - 我假设在给定移位操作的情况下 - 那么你应该使用while循环:

var i = password.length()
while (i != 0) {
  // some code
  i >>>= 1
}
Run Code Online (Sandbox Code Playgroud)

这是少数几种Java比Scala更紧凑的情况之一.

您还可以使用尾递归:

final def passwordStuff(password: Password)(i: Int = password.length): Whatever = {
  if (i != 0) {
    // Some code
    passwordStuff(password)(i >>> 1)
  }
}
Run Code Online (Sandbox Code Playgroud)

这将编译成与while循环相同的速度(几乎在所有情况下,无论如何).