2016-10-18 3 views
0

다음 스칼라 코드가 있습니다. 이 코드에서, 나는 함수에 (글로벌) 문자열 이름을 전달하고 아래 그림과 같이 첫 번째 인수에 따라 문자열을 변경하려는 오전 :이름 스칼라로 함수 인수 전달

def retVal(x: (String,String), y: => String) = {if (x._1 != "") {y = x._1;x} else (y,x._2)} 

하지만이 코드를 실행하면, 나는 다음과 같은 오류가 발생합니다 :

y = x._1 
^
reassignment to a val 

이 함수를 호출 할 때 전역 문자열 변수가 업데이트되도록 코드를 수정할 수 있습니까?

+0

}이

object MutationBox { var globalString = "" def retVal(x: (String,String)) = { if (x._1.nonEmpty) { globalString = x._1 x } else (globalString, x._2) } 

같은 것을 할 변이하려는 경우. 일반적으로'retVal'과 같은 함수는 필요 없습니다. 'retVal'을 호출하는 문맥을 보여줄 수 있습니까? – TeWu

답변

1

함수 인수는 기본적으로 스칼라에서는 변경되지 않습니다. 함수 매개 변수에 a 값을 할당 할 수 없습니다.

가능한 경우 이름 param으로 호출에 할당하려고합니다.

또한 돌연변이가 나쁜 대신 값을 반환하고 새 변수에 할당하십시오.

하지만 여전히 당신은 당신은 아마 뭔가 잘못하고있다