Considere estas dos rasgos:Componer comportamiento rasgo en Scala en un Akka reciben método
trait Poked extends Actor {
override def receive = {
case Poke(port, x) => ReceivePoke(port, x)
}
def ReceivePoke(port: String, x: Any)
}
trait Peeked extends Actor {
override def receive = {
case Peek(port) => ReceivePeek(port)
}
def ReceivePeek(port: String)
}
Considere ahora puedo crear un nuevo actor que implementa ambos rasgos:
val peekedpoked = actorRef(new Actor extends Poked with Peeked)
¿Cómo puedo redactar el recibir controladores? es decir, el receptor debe ser algo como el siguiente código, aunque "generada automáticamente" (es decir, todos los rasgos debe componer):
def receive = (Poked.receive: Receive) orElse (Peeked.receive: Receive) orElse ...
eso es muy interesante, que gracias :-) Pero se supone la existencia previa de un IntOrString tipo que es a la vez un Int y una cadena, y que IntOrString sabe que debe componer aquellos (que, si estoy construyendo un marco, el otro puede pasar por alto). ¿No es posible hacer que los rasgos IntActor y StringActor comprendan automáticamente? –
El orden viene dado por la linealización de los rasgos mixtos, por lo tanto, es "predecible" ;-) y al usar antepones coincide la anulación de los rasgos posteriores wrt. los anteriores, ¡así que creo que su solución es muy buena! –
¡Excelente visualización de su scala-fu! :-) –