Рассмотрим эти две черты:Сочинение черта поведения в Scala в Акку получить метод
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)
}
Теперь рассмотрим я могу создать новый актер, который реализует обе черты:
val peekedpoked = actorRef(new Actor extends Poked with Peeked)
Как сочинить получать обработчики? то есть, приемник должен быть чем-то вроде следующего кода, хотя «автоматически» (то есть все черты должны составлять):
def receive = (Poked.receive: Receive) orElse (Peeked.receive: Receive) orElse ...
Это очень интересно, спасибо :-) Но это предполагает предварительное существование типа IntOrString, который является как Int и String, и что IntOrString знает, что должно составлять те (которые, если я создаю рамки, другие могут игнорировать). Невозможно ли автоматическое создание признаков IntActor и StringActor? –
Порядок задается линеаризацией смешанных признаков, следовательно, «предсказуемым» ;-) И использование предваряющих совпадений заключается в переопределении более поздних признаков по. более ранние, поэтому я думаю, что ваше решение очень приятно! –
Отличный показ вашего scala-fu! :-) –