ref @ Ping在akka中的含义

时间:2015-05-23 14:39:17

标签: scala pattern-matching akka actor

我在akka上浏览了一些代码示例,我找到了一个特别的例子,我想确定其含义:

def receive: Receive = { case original@Ping(x) => // do stuff case _ => //do stuff }

Ping是示例中用于消息的案例类。 但是original@的含义是什么?是邮件发件人吗?如果是这样,这种方法相比使用sender变量有什么好处吗?

抱歉,但我无法给你链接,因为我再也找不到了......

  

不确定这个Akka是否只是一个我不知道的高级Scala模式匹配功能..

2 个答案:

答案 0 :(得分:3)

最简单的方法是尝试:

case class Ping(x: Int)

scala> val msg = Ping(10)
msg: Ping = Ping(10)

scala> msg match {
     |    case original @ Ping(x) => {
     |        println("Original: " + original)
     |        println("x: " + x)
     |    }
     |    case _ => println("no match")
     | }
Original: Ping(10) // Printed the entire msg that was matched
x: 10              // Printed just the value x that was matched

因此original相当于msg Ping(10)@符号允许您将整个匹配的对象分配给标识符。

答案 1 :(得分:3)

这是一个名为variable binding的Scala功能。它将匹配的值绑定到变量上。您可以在此处找到更多示例Scala @ operator