2013-04-12 2 views
6

저는 스칼라를 배우기 시작했습니다. 재귀 함수를 구현하는 동안 나는 이클립스 오류 "단순한 표현의 불법 시작"을 가지고 :스칼라에서 불법적 인 간단한 표현이 시작됩니다.

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 LongLines { 

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

참고 : 다음 "데프에는 processFile (파일 이름 : 문자열, 폭 : INT)처럼 보였다 책에 예제 8.1 발견 {"및 종료 "}"

은 내가 '방법'몸을 둘러싸 {}로 스칼라가 오류 메시지없이 컴파일되었습니다.

+0

완료되었습니다. 이전 코멘트를 삭제했습니다. – ChuanRocks

+2

이것은 스칼라를 사용하는 동안 기억해야 할 가장 중요한 사항입니다. 할당은'''Unit'''을 반환합니다 – Amareswar

+0

all clean now :) –

0

들여 쓰기 recurcount 안에 있음을 암시하는 것 같다,하지만 당신은 그것을 둘러싼 {}을 두지 않았기 때문에, 단지 var (불법 인 count 그냥 경우 - 다른이며, recur은 - 당신은에 있습니다 반환 뭔가). 나는 비슷한 문제가 있었다

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

: 당신은 어떻게 든 값을 반환해야하므로