我刚开始学习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.
有谁能告诉我在(递归)函数中定义变量我做错了什么?我在网上进行了搜索,但无法解释这个错误。
答案 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编译它没有错误消息。