通过扩展
Actor
基本特征并实施receive
方法来实现Actor。receive
方法应该定义一系列case语句(类型为PartialFunction[Any, Unit]
),它定义了你的Actor可以处理的消息,使用标准的Scala模式匹配,以及消息应该如何实现处理。
代码:
class MyActor extends Actor {
val log = Logging(context.system, this)
def receive = {
case "test" ⇒ log.info("received test")
case _ ⇒ log.info("received unknown message")
}
}
没有输入要接收,那么在case语句中匹配的内容是什么?
此外,PartialFunction[Any, Unit]
如何进入图片?
答案 0 :(得分:2)
演员是消息驱动的,input
被提供给演员,就像发送到mailbox的消息一样。消息最常见的是sent to an actor tell
!
(即myActor ! "test"
),如:
receive
actor中的PartialFunction[Any, Unit]
方法允许对消息进行模式匹配(通常按类型)以相应地处理它们。该方法的类型为case
,因此:
case i: Int => // do something with i
case s: String => // do something with s
// ...
模式匹配是一种部分功能,非常适合作为有效处理各种传入信息的筛选工具
它可以接收任何类型的消息,以任何必要的方式处理它们,并且不需要返回任何内容,例如:
UnhandledMessage()
请注意,在unhandled messages的情况下,class C:
@staticmethod
def f(a, b):
return a + b
>>> C.f(2, 2)
4
将被发布到ActorSystem。
答案 1 :(得分:0)
传递给actor的消息是匹配的
例如:如果调用actor ! "message"
,则匹配"message"
。
见这里
https://alvinalexander.com/scala/how-to-communicate-send-messages-scala-akka-actors
PartialFunction[Any, Unit]
因为它接受Any
类型的参数但没有返回任何内容而进入画面。如果将"message"
传递给actor,则String
是传递给PartialFunction
的参数类型。在模式匹配期间,它不会返回值。所以Unit
返回类型。