Scalaでの非常に初心者の質問-Scalaで「何かが返されるまで機能を繰り返す」とはどうすればよいですか?
たとえば、次のように定義された結果が返されるまで呼び出したい関数があるとします。
def tryToGetResult: Option[MysteriousResult]
私はこの解決策を思いついたが、それは本当に醜いと感じている。
var res: Option[MysteriousResult] = None
do {
res = tryToGetResult
} while (res.isEmpty)
doSomethingWith(res.get)
または、同等に醜い:
var res: Option[MysteriousResult] = None
while (res.isEmpty) {
res = tryToGetResult
}
doSomethingWith(res.get)
空var
かどうかを手動でチェックする手間をかけずに、解決策があるように感じます。Option
比較のために、私が見ているJavaの代替案は、ここでははるかにクリーンなようです。
MysteriousResult tryToGetResult(); // returns null if no result yet
MysteriousResult res;
while ((res = tryToGetResult()) == null);
doSomethingWith(res);
傷害に侮辱を加えるために、必要がなくdoSomethingWith(res)
、この関数から返す必要がある場合、ScalavsJavaは次のようになります。
Scala
def getResult: MysteriousResult = {
var res: Option[MysteriousResult] = None
do {
res = tryToGetResult
} while (res.isEmpty)
res.get
}
Java
MysteriousResult getResult() {
while (true) {
MysteriousResult res = tryToGetResult();
if (res != null) return res;
}
}