🌞


Note that this blog post has been archived. Information may be out of date or incorrect.

Why is my Akka Actor getting "deadLetters" as sender?

That is a question that kept my busy for almost an hour… I had an Actor defined like this (simplified, of course):

:scala:
trait Foo { self: Actor =>
    [...]
}

class Bar extends Actor with Foo {
    [...]
    def receive = {
        case x => sender ! x
    }
}

Weirdly enough, when I was sending messages to that actor, the responses always came from the deadLetters Actor belonging to my actor system. The reason for this behavior was the fact that I used self as the name for the Foo trait’s self-type, because “There is already an implicit val self defined in Actor which refers to an actor’s own ActorRef”, and if you override that, well, it breaks.

Therefore, if I change my trait to read something like this

:scala:
trait Foo { actor: Actor =>
    [...]
}

everything works as expected.