scala相当新鲜。我有这个功能:
def retrieveValue(valueName:String) : Double = {
for (ln <- io.Source.stdin.getLines) {
val parseResult = parseValue(ln)
parseResult match {
case Right(x) => return x
case Left(error) => println(error.message + " Please try again.")
}
}
}
我收到了这个编译错误:
QuadSolver.scala:14: error: type mismatch;
found : Unit
required: Double
for (ln <- io.Source.stdin.getLines) {
我究竟做错了什么?
答案 0 :(得分:1)
parseResult match {
case Right(x) => x //note that `return` keyword is not needed
case Left(error) => println(error.message + " Please try again.") //returns Unit
}
这段代码返回Double
或Unit
(Unit
提供的println
),因此编译器期望Double
作为方法&#39 ; s返回类型显然是抱怨。
在函数式编程中,最好让每个函数严格遵循单一责任原则 因此,您应该有一个旨在检索值的函数和一个用于打印结果的函数。