해당 인스턴스 외부의 정보에 따라 개체 인스턴스의 복사본을 조건부로 만들고 싶습니다. 사본에있는 대부분의 정보는 원본과 동일하지만 일부 정보는 변경해야합니다. 이 정보는 액터들 사이를 지나가고 있기 때문에 이상한 동시성 관련 동작을 피하기 위해 객체를 불변으로 유지해야합니다. 다음 장난감 코드는 내가 도움이 될만한 간단한 예제입니다.변경 불가능한 인스턴스 만들기 및 관용적 인 방법으로 복사본 수정
나는 다음과 같은 코드가있는 경우 :
case class Container(condition:String,amount:Int,ID:Long)
내가 할 수 다음
val a = new Container("Hello",10,1234567890)
println("a = " + a)
val b = a.copy(amount = -5)
println("b = " + b)
println("amount in b is " + b.amount)
를 출력 내가 또한 조건의 복사본을 만들 수 있습니다
a = Container(Hello,10,1234567890)
b = Container(Hello,-5,1234567890)
amount in b is -5
입니다 다음을 수행하는 객체 :
I -5에 B 객체의 크기를 설정하면 691,363,210import scala.Math._
val max = 3
val c = if(abs(b.amount) >= max) b.copy(amount = max,condition="Goodbye") else if(abs(b.amount) < max) b.copy(amount = abs(b.amount))
println("c = " + c)
후 출력
c = Container(Goodbye,3,1234567890)
이고 I는 -2로 B 오브젝트의 양을 설정하면, 출력은
인c = Container(Hello,2,1234567890)
내가 c.amount을 인쇄 할 때 그러나, 다음과 같은 메시지가 컴파일러에 의해 신고되어
println("amount in c is " + c.amount)
01 I는 I 컴파일러 에러를타입 불일치를 얻을
val c:Container = if(abs(b.amount) >= max) b.copy(amount = max,condition="Goodbye") else if(abs(b.amount) < max) b.copy(amount = abs(b.amount))
로 C 오브젝트 작성 라인을 변경하면 23,516,
값 량 상관
의 구성원이고; 발견 단위가 필요합니다 : 컨테이너
기존 인스턴스를 복사하고 값 또는 두 가지를 수정하여 경우 클래스의 불변의 인스턴스를 생성 조건의 가장 좋은, 관용적 인 방법은 무엇입니까
를?감사합니다, 브루스 당신은 최종 else
절을 포함하지 않는
감사를 단순화 할 수 있습니다 –