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)
并且只需要从这个函数中返回它,Scala vs Java 看起来像这样:
斯卡拉
def getResult: MysteriousResult = {
var res: Option[MysteriousResult] = None
do {
res = tryToGetResult
} while (res.isEmpty)
res.get
}
爪哇
MysteriousResult getResult() {
while (true) {
MysteriousResult res = tryToGetResult();
if (res != null) return res;
}
}