一部のJavaコードをScalaに変換する必要があります。私はそのような情報源を持っています。Scalaでそれを書き直す方法は?質問は簡単かもしれません。ただし、ドキュメントのfor(i <-1 until 10){}の例よりも一致しにくいです。
for (int i = password.length(); i != 0; i >>>=1)
{ some code }
キングよろしく、アレクセイ
できるだけ速くしたい場合(シフト操作が与えられた場合であると私は想定しています)、whileループを使用する必要があります。
var i = password.length()
while (i != 0) {
// some code
i >>>= 1
}
これは、Javaが同じ操作でScalaよりもコンパクトである数少ないケースの1つです。
末尾再帰を使用することもできます。
final def passwordStuff(password: Password)(i: Int = password.length): Whatever = {
if (i != 0) {
// Some code
passwordStuff(password)(i >>> 1)
}
}
これは、whileループと同じ速度でコンパイルされます(とにかく、ほとんどすべての場合)。
エキゾチックな機能的な方法を探している場合は、次のように書くことができます。
Stream.iterate(password.length)(i => i >>> 1).takeWhile(0!=)
次のアクションを怠惰に実行します:パスワードの長さを初期値として取得し、{ => i >>> 1 }
それに適用し、次の反復に渡し、適用します...パス、...
次に、計算のスコープを設定し、0に等しくない値のみに制限しました。
i >>>=
i /= 2
1は正の整数と同等です。
この知識と、 scalaのforループ(ループ変数)を5の累乗でインクリメントするための答えを組み合わせると、設定する必要があります。
>>>=演算子を知りませんでした。もう少し機能的にしようとしましょう。foreachは関数A=>Unitを取ります。この場合、AはIntです。
def breakdownBy2(from:Int):List[Int] = if(from == 0) Nil else List(from) ++ breakdownBy2(from/2)
breakdownBy2(passoword.length).foreach(println(_))