【发布时间】:2012-11-22 00:59:42
【问题描述】:
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
}
Java
MysteriousResult getResult() {
while (true) {
MysteriousResult res = tryToGetResult();
if (res != null) return res;
}
}
【问题讨论】: