Tråd-baserade actors har "receive" med signaturen "def receive[R](f: PartialFunction[Any, R]): R", dvs den evaluerar till värdet av receive-hanteringen. Fullt logiskt.
Men! För event-baserade actors har motsvarigheten "react" istället signaturen "def react(handler: PartialFunction[Any, Unit]): Nothing ", dvs den evaluerar aldrig till någonting.
Hur kommer det sig att den inte evaluerar till något? Jo djupt under ytan hittar vi
trait Reactor ...
protected def react(handler: PartialFunction[Msg, Unit]): Nothing = {
...
throw Actor.suspendException
}
Dvs den kastar medvetet för att se till att den inte fortsätter exekveringen.
Detta gör att i koden
react {
case _ => {
println("reacting")
}
}
println("reacted")
så kommer "reacted" aldrig att skrivas ut. Inte helt intuitivt.
Så varför evaluerar den inte till någonting? Varför har man valt denhär designen? Vad har den för fördelar - jag kan inte komma på någon tilltalande anledning.
Kan någon sprida lite ljus över mysteriet?
Dan Bergh Johnsson
Hört talas om Akka?
--
Det här meddelandet skickas till dig eftersom du prenumererar på gruppen scala-sverige i Google Groups.
Om du vill göra ett inlägg i den här gruppen skickar du e-post till scala-...@googlegroups.com.
Om du vill sluta prenumerera på den här gruppen skickar du e-post till scala-sverig...@googlegroups.com.
För fler alternativ, besök gruppen på http://groups.google.com/group/scala-sverige?hl=sv.
Hej,har du läst Kap 3.2 i http://infoscience.epfl.ch/record/128406/files/haller_tcs2008_accepted.pdf ?