这个案例类匹配模式是如何工作的?
我刚刚在 Scala Actors 包中看到了这个案例类:
case class ! [a](ch: Channel[a], msg: a)
并且在 JavaDoc 中,它以以下形式描述了用法:
receive {
case Chan1 ! msg1 => ...
case Chan2 ! msg2 => ...
}
为什么不是:
receive {
case !(Chan1, msg1) => ...
case !(Chan2, msg2) => ...
}
是 bang 运算符! 特殊情况与以冒号结尾的方法类似:
I've just seen this case class in the Scala actors
package:
case class ! [a](ch: Channel[a], msg: a)
And in the JavaDoc it describes usage in the following form:
receive {
case Chan1 ! msg1 => ...
case Chan2 ! msg2 => ...
}
Why is this not:
receive {
case !(Chan1, msg1) => ...
case !(Chan2, msg2) => ...
}
Is the bang operator ! a special case in a similar way to methods ending in a colon :
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
进行模式匹配时,Scala 编译器会将
o1 c1 o2
解释为c1(o1, o2)
。 这就是为什么::
也可以在模式匹配中工作。When doing pattern matching, the Scala compiler will interpret
o1 c1 o2
the same asc1(o1, o2)
. That's why::
works inside pattern matches too.