13

我刚开始学习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.

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

4

4 回答 4

11

变量声明 ( 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
    }

  }


}
于 2013-04-12T03:43:54.380 回答
2

缩进似乎暗示 that recuris inside count,但由于您没有放置{}包围它,count所以只是 if-else,并且recur只是var(这是非法的 - 你必须返回一些东西)。

于 2013-04-12T03:42:59.503 回答
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 编译它时没有错误消息。

于 2013-06-29T18:39:51.047 回答
0

我有一个类似的问题,我正在做类似的事情

nums.map(num =>
  val anotherNum = num + 1
  anotherNum
)

修复它的方法是添加花括号:

nums.map { num =>
  val anotherNum = num + 1
  anotherNum
}

我认为这些表达式在 Scala 中是等价的,但我想我错了。

于 2021-08-20T16:05:59.257 回答