저는 자동 판매기를 구현하는 프로젝트를 가지고 있습니다. VendingMachine 개체가 있는데, 내부에 CoinOp라는 다른 개체가 있습니다. CoinOp 객체가 다양한 값의 동전을 받아들이기를 원합니다. VendingMachine은 CoinOp에 사용자가 입력 한 금액을 알려달라고 요청할 수 있습니다. 실제로 작동하려면 CoinOp가 내부에있는 금액을 변경할 수 있어야합니다.스칼라와 스카라로 시간이 지남에 따라 변경되는 객체를 포함하는 프로젝트를위한 순수한 기능 아키텍처 구현 방법
정의한 VendingMachine은 다음과 같습니다
class CoinOp {
var money = 0.0f
def addCoins(amount: Float) = money += amount
}
가 대신 내가 뭔가를 할 필요가 :
class VendingMachine {
val coinOp = new CoinOp()
}
내가 바로 옵션으로 CoinOp의 구현을 제거하는 기능적인 방법으로이 작업을 수행 할 수 좋아요 :
case class CoinOp(money: Float) {
def addCoins(amount: Float): CoinOp = CoinOp(money + amount)
}
나는이 같은 것을하기 위해 스카 파를 사용할 수 있습니다. . scalaz에서의 구현은 실제로이 질문의 초점이 아닙니다.
내 질문은 : 내가 CoinOp가 가지고있는 금액을 기능적으로 업데이트 할 수 있다고 가정하면 변경된 VendingMachine을 어떻게 표시합니까?
addCoins에서 새 CoinOp 개체를 만드는 것은 훌륭하지만 모든 것이지만 새로운 개체이며 VendingMachine에 참조가있는 개체를 변경하지 않습니다. 어떤 좋은 영속성, 함수 프로그래밍의 모든 부분입니다. 그러나 addCoins()가 클래스 정의에있는 객체 대신 생성하는 객체를 사용하려면 VendingMachine이 필요합니다. 어떻게해야합니까?
제가 생각할 수있는 유일한 점은 VendingMachine에서 coinOp 객체를 만드는 것입니다. var는 CoinOp # addCoins에 대한 호출에 응답하여 설정할 수 있습니다. 그러나 그것은 저에게 좋은 해결책처럼 보이지 않습니다.
누군가가 어떻게 설정 될지 설명해 주시겠습니까?
가 보인다 자체 내부에 상태를 유지, Akka 배우이다. –