0
akka를 사용하여 스칼라로 논리 회로 구현을하고 있는데 와이어 액터 (예 : AND 게이트와 같은 구성 요소 액터)를 구현해야합니다 : 와이어가 전송되어야합니다 신호, 참 또는 거짓.akka를 사용하여 회로 (와이어) 작성하기
akka를 사용하여 스칼라로 논리 회로 구현을하고 있는데 와이어 액터 (예 : AND 게이트와 같은 구성 요소 액터)를 구현해야합니다 : 와이어가 전송되어야합니다 신호, 참 또는 거짓.akka를 사용하여 회로 (와이어) 작성하기
akka를 배우는 것이 좋습니다. 작업은 시작하기 좋은 곳입니다.
시작하기 전에 몇 가지 사항을 살펴보십시오. 현재 코드와 모델링에 대해 몇 군데 질문 할 수 있습니다.
AddComponent
에는 wireName
이 필요합니까? 배우 이름으로 전선을 찾으려고합니까? 일반적으로 이름 대신 ActorRef
을 사용합니다.StateChange
에 wireName
이 필요한 이유는 무엇입니까? 정말 중요합니까? 상태 전파가 단순한 메시지를 사용하여 수행 될 수 있다고 말합니다. ActorRef
세트가 정상이므로 배우의 이름을 저장할 때 어떤 이점도 있다고 생각하지 않습니다.current: Boolean
과 같은 기본 유형을 처리하는 것이 일반적으로 좋은 생각이 아니므로 StateChange
과 마찬가지로 우리의 메시지에 의미 론적 의미를 부여하고 싶습니다.내가 생각 해낸 일부 코드 : 필요에 따라
import akka.actor.{ActorLogging, Actor, ActorRef}
case class AddComponent(actor: ActorRef)
case class StateChange(state: Boolean)
class Wire(var currentState: Boolean) extends Actor with ActorLogging {
var connections = Set.empty[ActorRef]
def receive: Actor.Receive = {
case AddComponent(actor) =>
connections += actor
case StateChange(state) =>
currentState = state
val connectionsToPropagateTo = connections - sender // Don't propagate back to sender
connectionsToPropagateTo.foreach { component =>
component ! StateChange(currentState) // Send the component a StateChange message.
}
}
}
당신은 단순히 RemoveComponent
과 다른 물건이를 확장 할 수 있습니다.
나는 그것을 얻지 못한다 ... – user2947615
무엇을 얻지 마라? 너 좀 정교 할 수있어. –