Scala函数返回分号错误

时间:2014-11-10 21:47:50

标签: scala functional-programming

def TempConversion(ciferTemp: Double, typeDeg: String): Double = {
   var celsit: Double = 0.0
   var far: Double = 0.0

   if (typeDeg = "c")

   far = (ciferTemp - 32) / (5.0 / 9.0)
   println(far + "en farhenheit")

   else if (typeDeg ="f") {
   celsit = (ciferTemp * (5.0 / 9.0)) + 32
   println(celsit + "en celsius")}

}

我无法弄清楚这个函数有什么问题,它告诉我预期会出现一个分号。

3 个答案:

答案 0 :(得分:2)

问题是您使用else开始声明。

使用if块,如果只有一个语句,则只能省略{大括号}。由于您放置了第二个语句,因此编译器假定它不是if块的一部分,因此后面的else是一个全新表达式的开头。由于else不是表达式的有效开头,因此编译器会感到困惑,并为您提供该错误。

由于您打算在初始if块中包含多行/语句,因此应使用括号将其包装起来。你也应该缩进这两行(缺少适当的缩进不是问题,但仍然很重要)。

(哦,你正在使用赋值运算符=,你应该有一个等于运算符==

这是它应该是什么样子:

if(typeDeg == "c"){
  far = (ciferTemp - 32) / (5.0 / 9.0)
  println(far + "en farhenheit")
} else if(typeDeg == "f") {
  celsit = (ciferTemp * (5.0 / 9.0)) + 32
  println(celsit + "en celsius")
}

答案 1 :(得分:2)

@Dylan解决了if else==的一些问题。在这里,您可以通过模式匹配来实现它,使其更加简洁。您可以添加其他案例来处理与其他度量单位的转换,以及一个用于无效typeDeg输入的转换。

def TempConversion(ciferTemp: Double, typeDeg: String): Double = typeDeg match {
   case "c" => (ciferTemp - 32) / (5.0 / 9.0)
   case "f" => (ciferTemp * (5.0 / 9.0)) + 32
}

答案 2 :(得分:1)

进行一些更改后

def TempConversion(ciferTemp: Double, typeDeg: String): Double = {
    if (typeDeg == "c") {
      val far = (ciferTemp - 32) / (5.0 / 9.0)
      println(far + "en farhenheit")
      far
    } else if (typeDeg == "f") {
      val celsit = (ciferTemp * (5.0 / 9.0)) + 32
      println(celsit + "en celsius")
      celsit
    } else {
      // throw an exception, maybe?
      0.0
    }
  } 

(使用==而不是=进行比较,在{}周围使用if-else,从if/else的每个部分返回计算结果,当typeDeg没有预期值时执行某些操作,在相关块内移动farcelsit的声明(并将其更改为val))