为什么遵循代码
def doSomething() = "Something"
var availableRetries: Int = 10
def process(): String = {
while (true) {
availableRetries -= 1
try {
return doSomething()
} catch {
case e: Exception => {
if (availableRetries < 0) {
throw e
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
产生以下编译错误
error: type mismatch;
found : Unit
required: String
while (true) {
^
Run Code Online (Sandbox Code Playgroud)
?
这在C#中可以正常工作.while循环永远,所以它不能终止,因此它不能产生除字符串以外的东西.或者如何在Scala中创建无限循环?
我有以下代码,但我无法让它工作.一旦我在表壳内放置一个while循环,它就会返回一个单位,无论我在括号内改变什么.
case While(c, body) =>
while (true) {
eval(Num(1))
}
}
Run Code Online (Sandbox Code Playgroud)
如何使while循环返回非Unit类型?
我尝试在我的条件下添加括号,但它仍然没有按照预期的那样做.
有什么指针吗?
更新
更多的背景信息,因为我没有真正解释代码应该做什么,如果我想得到一些帮助,这似乎很方便;
我已经定义了一个eval(exp : Exp).这将评估一个功能.
Exp是一个抽象类.几类,如扩展Plus,Minus(几个基本操作)和IfThenElse(cond : Exp, then : Exp, else : Exp).最后但并非最不重要的是,有While(cond: Exp, body: Exp).
如何使用它的例子;
eval(Plus(Num(1),Num(4))会导致NumValue(5).(Num(v:Value)的评估结果为NumValue(v).NumValue扩展了Value,这是另一个抽象类).
eval(While(Lt(Num(1),Var("n")), Plus(Num(1), Var("n"))))
Run Code Online (Sandbox Code Playgroud)
Lt(a : Exp, b : Exp)NumValue(1)如果<b,则返回