【问题标题】:Message passing using akka with case使用带有 case 的 akka 传递消息
【发布时间】:2013-12-14 15:28:26
【问题描述】:
class ActorA(processB:ActorRef) extends Actor with ActorLogging{
def receive = {
case (0) =>
println(1000)
case (_) =>
println (2*_)
}
}
如果传递的消息为 0,则我正在编写此代码以输出 1000,否则为 2x,但它告诉我 * 不是扩展函数的 Any 和缺少参数类型的成员
【问题讨论】:
标签:
scala
akka
actor
messages
【解决方案1】:
发送给参与者的消息可以是任何类型,因此您的最终模式是针对 Any 类型的值。
如果只想处理 Int ,则需要在模式中指定类型。
此外,您不能与 _ 匹配,然后将 _ 用作变量。他们的意思不同。案例中的第一个意味着您不在乎价值是什么。
第二个是函数参数的占位符。
你想要的是:
class ActorA(processB:ActorRef) extends Actor with ActorLogging{
def receive = {
case (0) =>
println(1000)
case x:Int =>
println (2*x)
}
}
【解决方案2】:
您可以将这种情况添加到接收函数中:
case (number:Int) => println (2*number)
记住,当你使用下划线_的情况下,你不能使用=>符号后面的变量值。