2013-04-12 44 views
6

我剛開始學習Scala。而試圖實現一個遞歸函數我在Eclipse中的錯誤「簡單表達的非法啓動」:Scala中簡單表達式的非法開始

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. 

誰能告訴我,我做錯了什麼有關定義(遞歸)函數內的變量?我在網上做了一個搜索,但是不能解釋這個錯誤。

回答

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 
    } 

    } 


} 
+0

完成了。我刪除了我以前的評論。 – ChuanRocks

+2

這是使用scala時要記住的最重要的一點。分配將返回'''Unit''' – Amareswar

+0

全部清除:) –

0

縮進似乎暗示recur裏面count,但因爲你沒有把{}周圍,count只是的if-else和recur只是var(這是非法的 - 你必須返回一些東西)。

0

我也有類似的問題。

object LongLines { 

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

注:在 「DEF processFile(文件名:字符串,寬度:智力)中,看起來像書中發現實施例8.1 {」 和結束 「}」

我所包圍的 '方法' 體用{}和s​​cala編譯它,沒有錯誤信息。