간단한 스칼라 질문입니다. 아래를 고려하십시오.증분 값 받기
scala> var mycounter: Int = 0;
mycounter: Int = 0
scala> mycounter += 1
scala> mycounter
res1: Int = 1
두 번째 문장에서 나는 카운터를 증가시킵니다. 하지만 아무것도 반환되지 않습니다. 한 문에서 무엇을 증분하고 반환합니까?
간단한 스칼라 질문입니다. 아래를 고려하십시오.증분 값 받기
scala> var mycounter: Int = 0;
mycounter: Int = 0
scala> mycounter += 1
scala> mycounter
res1: Int = 1
두 번째 문장에서 나는 카운터를 증가시킵니다. 하지만 아무것도 반환되지 않습니다. 한 문에서 무엇을 증분하고 반환합니까?
사용 '+ ='return Unit, 당신이해야하므로 (함수의 매개 변수가 발이기 때문에)
{ mycounter += 1; mycounter }
당신은 너무 폐쇄를 사용하여 트릭을 수행 할 수 있습니다
scala> var x = 1
x: Int = 1
scala> def f(y: Int) = { x += y; x}
f: (y: Int)Int
scala> f(1)
res5: Int = 2
scala> f(5)
res6: Int = 7
scala> x
res7: Int = 7
을 BTW, 당신 대신 불변 값을 사용하고이 프로그래밍 스타일을 사용하는 것을 고려해보십시오. 그러면 모든 문장이 결과를 반환합니다.)
좋은 게시글입니다. 그러나 내 경우에는 완전히 불변으로 만들 수는 없다는 의미의 카운터를 사용하고 있습니다. – dublintech
전 당신이 할 수있을 거라 확신합니다. 유스 케이스 전체를 공유 할 수 있을까요? –
오, 좋아, 배우에서 상태를 돌연변이 (다른 게시물에 대한 의견을 보았습니다), 그럼 확실히 이해가 되네. –
할당은 평가되는 표현식입니다 단위. 그 이유에 대해서는 다음에서 찾을 수 있습니다 : What is the motivation for Scala assignment evaluating to Unit rather than the value assigned?
스칼라에서 이것은 일반적으로 문제를 해결하는 데 다른 구조가 있기 때문에 일반적으로 문제가되지 않습니다.
나는 당신의 정확한 사용 사례를 모르겠지만, 당신이 점진를 사용하려면 다음과 같은 형태가 될 수 있습니다 가끔
(1 to 10).foreach { i =>
// do something with i
}
정확한 사례를 실행하는 해요 카운터를 캡슐화하는 액터가 있습니다. 메시지를 보낼 때마다 값이 커집니다. – dublintech
내가보기에 그것은'var'을위한 좋은 장소입니다. 이 경우 Alois Cochard가 다음과 같이 제안했다. def increment : Int = {counter + = 1; 카운터}' – EECOLOR
내가 할이 :
val nextId = { var i = 0;() => { i += 1; i} }
println(nextId()) //> 1
println(nextId()) //> 2
마이트 값에 액세스하기 위해 언젠가이 증가하지 않으면 사용자에게 도움이되지 않습니다.
그렇지 않습니다. 부작용 메서드 또는 표현식은 일반적으로 흥미로운 값을 반환하지 않으며 'Unit'만 반환합니다. –
@ 란달 슐츠 부작용에 대한 좋은 지적. – dublintech