读取输入会引发编译错误

时间:2014-04-27 22:54:20

标签: scala input

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) {

我究竟做错了什么?

1 个答案:

答案 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
}

这段代码返回DoubleUnitUnit提供的println),因此编译器期望Double作为方法&#39 ; s返回类型显然是抱怨。

在函数式编程中,最好让每个函数严格遵循单一责任原则 因此,您应该有一个旨在检索值的函数和一个用于打印结果的函数。