2016-10-12 1 views
1

에서 나는 다음과 같은 코드로 컴파일 시간 오류가 점점 오전 :튜플과 경우 스칼라

val bestModel = model 
val bestEvals: List[Double] = null 

... <code, including code that initializes bestEvals> ... 

(bestModel, bestEvals) = if (allAgreeBetter) 
    (updatedModel, currentEvals.map {case (eval, _) => eval}.toList) 
else 
    (bestModel, bestEvals) 

오류가 (있습니다) :

Error:(203, 34) ';' expected but '=' found. 
     (bestModel, bestEvals) = if (allAgreeBetter) 
Error:(205, 11) ';' expected but 'else' found. 
     else 

나는 무엇을 그리워 했습니까? 이 문장을 꺼내면 코드가 컴파일되어 제대로 실행되므로 문제는 특히이 문장에 있습니다.

+2

답을 추가하면 값을 'val'바인딩에 다시 할당 할 수 없습니다. 당신은'var'을 사용해야 할 것입니다. 다중 할당의 경우,'if (x) {y = z; a = b} else {y = z2; a = b2}'. 또한'{case (eval, _) => eval}'은'_. 1 '로보다 간결하게 표현 될 수 있습니다. – Yawar

답변

1

앞서 말한 것처럼 here은 기존 참조에 튜플 지정을 할 수 없습니다. 이는 스칼라가 지원하지 않는 것입니다.

유일한 유사한 패턴 실제로 작업이 될 것이라고 : bestModelbestEvals 미리 선언 된

var (bestModel, bestEvals) = if (allAgreeBetter) ...

그러나, 당신이 그들을 재 선언 (그들에게 새로운 값을 할당하지 않음) 할 것 .

희망이 도움이됩니다.

건배.

관련 문제