=act #3572 Add parens to sender

* because it is not referentially transparent; normally we reserved parens for
  side-effecting code but given how people thoughtlessly close over it we revised
  that that decision for sender
* caller can still omit parens
This commit is contained in:
Patrik Nordwall 2014-01-16 15:16:35 +01:00
parent 537840bd2a
commit a11fb1dafc
202 changed files with 631 additions and 620 deletions

View file

@ -40,7 +40,7 @@ class FirstActor extends Actor {
val child = context.actorOf(Props[MyActor], name = "myChild")
//#plus-some-behavior
def receive = {
case x => sender ! x
case x => sender() ! x
}
//#plus-some-behavior
}
@ -64,7 +64,7 @@ class DemoActorWrapper extends Actor {
class DemoActor(magicNumber: Int) extends Actor {
def receive = {
case x: Int => sender ! (x + magicNumber)
case x: Int => sender() ! (x + magicNumber)
}
}
@ -91,7 +91,7 @@ class AnonymousActor extends Actor {
def receive = {
case DoIt(msg) =>
val replyMsg = doSomeDangerousWork(msg)
sender ! replyMsg
sender() ! replyMsg
context.stop(self)
}
def doSomeDangerousWork(msg: ImmutableMessage): String = { "done" }
@ -123,10 +123,10 @@ class ReplyException extends Actor {
//#reply-exception
try {
val result = operation()
sender ! result
sender() ! result
} catch {
case e: Exception =>
sender ! akka.actor.Status.Failure(e)
sender() ! akka.actor.Status.Failure(e)
throw e
}
//#reply-exception
@ -271,7 +271,7 @@ class ActorDocSpec extends AkkaSpec(Map("akka.loglevel" -> "INFO")) {
"creating actor with IndirectActorProducer" in {
class Echo(name: String) extends Actor {
def receive = {
case n: Int => sender ! name
case n: Int => sender() ! name
case message =>
val target = testActor
//#forward
@ -365,12 +365,12 @@ class ActorDocSpec extends AkkaSpec(Map("akka.loglevel" -> "INFO")) {
class HotSwapActor extends Actor {
import context._
def angry: Receive = {
case "foo" => sender ! "I am already angry?"
case "foo" => sender() ! "I am already angry?"
case "bar" => become(happy)
}
def happy: Receive = {
case "bar" => sender ! "I am already happy :-)"
case "bar" => sender() ! "I am already happy :-)"
case "foo" => become(angry)
}
@ -417,7 +417,7 @@ class ActorDocSpec extends AkkaSpec(Map("akka.loglevel" -> "INFO")) {
def receive = {
case "kill" =>
context.stop(child); lastSender = sender
context.stop(child); lastSender = sender()
case Terminated(`child`) => lastSender ! "finished"
}
}
@ -522,12 +522,12 @@ class ActorDocSpec extends AkkaSpec(Map("akka.loglevel" -> "INFO")) {
def receive = {
case ref: ActorRef =>
//#reply-with-sender
sender.tell("reply", context.parent) // replies will go back to parent
sender.!("reply")(context.parent) // alternative syntax (beware of the parens!)
sender().tell("reply", context.parent) // replies will go back to parent
sender().!("reply")(context.parent) // alternative syntax (beware of the parens!)
//#reply-with-sender
case x =>
//#reply-without-sender
sender ! x // replies will go to this actor
sender() ! x // replies will go to this actor
//#reply-without-sender
}
}
@ -585,13 +585,13 @@ class ActorDocSpec extends AkkaSpec(Map("akka.loglevel" -> "INFO")) {
trait TheirComposableActor extends ComposableActor {
receiveBuilder += {
case "foo" => sender ! "foo received"
case "foo" => sender() ! "foo received"
}
}
class MyComposableActor extends TheirComposableActor {
receiveBuilder += {
case "bar" => sender ! "bar received"
case "bar" => sender() ! "bar received"
}
}
//#receive-orElse2

View file

@ -204,7 +204,7 @@ class CounterService extends Actor {
if (backlog.size >= MaxBacklog)
throw new ServiceUnavailable(
"CounterService not available, lack of initial value")
backlog :+= (sender -> msg)
backlog :+= (sender() -> msg)
}
}
@ -239,7 +239,7 @@ class Counter(key: String, initialValue: Long) extends Actor {
storeCount()
case GetCurrentCount =>
sender ! CurrentCount(key, count)
sender() ! CurrentCount(key, count)
}
@ -272,7 +272,7 @@ class Storage extends Actor {
def receive = LoggingReceive {
case Store(Entry(key, count)) => db.save(key, count)
case Get(key) => sender ! Entry(key, db.load(key).getOrElse(0L))
case Get(key) => sender() ! Entry(key, db.load(key).getOrElse(0L))
}
}

View file

@ -34,7 +34,7 @@ object FaultHandlingDocSpec {
//#strategy
def receive = {
case p: Props => sender ! context.actorOf(p)
case p: Props => sender() ! context.actorOf(p)
}
}
//#supervisor
@ -56,7 +56,7 @@ object FaultHandlingDocSpec {
//#strategy2
def receive = {
case p: Props => sender ! context.actorOf(p)
case p: Props => sender() ! context.actorOf(p)
}
// override default to kill all children during restart
override def preRestart(cause: Throwable, msg: Option[Any]) {}
@ -87,7 +87,7 @@ object FaultHandlingDocSpec {
def receive = {
case ex: Exception => throw ex
case x: Int => state = x
case "get" => sender ! state
case "get" => sender() ! state
}
}
//#child

View file

@ -44,7 +44,7 @@ object InitializationDocSpec {
}
def initialized: Receive = {
case "U OK?" => initializeMe foreach { sender ! _ }
case "U OK?" => initializeMe foreach { sender() ! _ }
}
//#messageInit