在Scala中非法启动简单表达式

时间:2013-04-12 03:30:55

标签: scala syntax

我刚开始学习scala。在尝试实现递归函数时,我在eclipse中收到错误“非法启动简单表达式”:

def foo(total: Int, nums: List[Int]): 
  if(total % nums.sorted.head != 0)
    0
  else 
    recur(total, nums.sorted.reverse, 0)

def recur(total: Int, nums: List[Int], index: Int): Int =
  var sum = 0 // ***** This line complained "illegal start of simple expression"
              // ... other codes unrelated to the question. A return value is included.

有谁能告诉我在(递归)函数中定义变量我做错了什么?我在网上进行了搜索,但无法解释这个错误。

3 个答案:

答案 0 :(得分:6)

变量声明(var)不返回值,因此您需要以某种方式返回值,这里是代码的样子:

object Main {

  def foo(total: Int, coins: List[Int]): Int = {

    if (total % coins.sorted.head != 0)
      0
    else
      recur(total, coins.sorted.reverse, 0)

    def recur(total: Int, coins: List[Int], index: Int): Int = {
      var sum = 0
      sum
    }

  }


}

答案 1 :(得分:0)

缩进似乎意味着recur位于count内,但由于您未将{}放在其周围,count只是if-else,而recur只是var(这是非法的 - 你必须返回一些东西)。

答案 2 :(得分:0)

我有类似的问题。在本书中找到了示例8.1,如下所示:

object LongLines {

def processFile(filename: String, width: Int) **{**
  val source = Source.fromFile(filename)
  for (line <- source.getLines) 
    processLine(filename, width, line)
**}**

注意:“def processFile(filename:String,width:Int){”和结束“}”

我用{}包围'方法'主体,scala编译它没有错误消息。