2017-11-19 14 views
-1

val에 저장된 값을 scala로 업데이트하려고합니다. 나는 이것을 다음과 같이 직접 할 수는 없다는 것을 알고있다 : val x = 2; x = 1. 이것은 당신이 발에 재 할당 할 수 없다는 것을 알고 있기 때문에 내가하는 일이 아닙니다. 이것은 내가 뭘하려고 오전입니다 :다시 할당하여 스칼라에서 val 업데이트

val fp = List((1,2)); 
    val fp = fp ::: List((1,3)); //hoping that x is List((1,2),(1,3)) 

을하지만 내가 말하는 메시지가 :

error: recursive value fp needs type 

이 또한 내가 불변의 데이터 구조와 발스 만 사용하도록 제한하고 있음을주의.

아무 지침이나 부탁드립니다.

+0

대신 VAR를 사용? – BlackBear

+0

내가 말했듯이, 나는 불변의 데이터 구조로 제한되어있다. Var는 변경 가능합니다. – User59

+0

나는 val과 불변의 데이터 구조로 제한되어 있습니다 – User59

답변

3

스칼라에서는 val을 재 할당 할 수 없습니다. 당신이 할 수있는 경우 일반적으로 당신이, 바르를 사용하여 피하려고한다

val fp = List((1,2)) 
val fp2 = fp ::: List((1,3)) 

: 당신은 VAR 사용해야 중 하나

var fp = List((1,2)) 
fp = fp ::: List((1,3)) 

을 두 발스을 사용합니다. 프로그램이 더 깨끗해 지므로이 방법이 확실히 기능적입니다. 그래서 두 번째 옵션을 선호합니다.

그런데 세미콜론을 사용할 필요가 없습니다. 사실 스칼라에서의 사용법은 실망 스럽습니다.

0

스칼라에서는 이 아닌이 코드를 통해 바람직하지 않은 부작용을 일으키고 추론하기가 더 어려워 지므로 코드를 재 할당하는 것이 좋습니다.

변수와 그 돌연변이를 버리는 습관이 들기 시작하고 바인딩 인을 고려하기 시작해야합니다. Var은 스칼라에서 나쁜 형식으로 간주됩니다. 재 할당도 마찬가지입니다.

:

val x = 2; val y = 1 

당신이 x를 "돌연변이"필요한 경우 다음과 같이 할 수있다 : 다음은 원치 않는 부작용 var의 돌연변이 중 하나를 만들 것없이 당신이 원하는 것을 정확히 수행

val x = 2 
val y = x + 2 // x = 2, y = 4 

그래서 당신은 fp 일부터 원했던 그 같을 것이다 :

val fp = List((1,2)); 
val fp1 = fp ::: List((1,3));