我在akka上浏览了一些代码示例,我找到了一个特别的例子,我想确定其含义:
def receive: Receive = {
case original@Ping(x) => // do stuff
case _ => //do stuff
}
Ping
是示例中用于消息的案例类。
但是original@
的含义是什么?是邮件发件人吗?如果是这样,这种方法相比使用sender
变量有什么好处吗?
抱歉,但我无法给你链接,因为我再也找不到了......
不确定这个Akka是否只是一个我不知道的高级Scala模式匹配功能..
答案 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