unapply 和 unapplySeq 有什么区别?
为什么 Scala 同时具有 unapply
和 unapplySeq
?两者有什么区别?我什么时候应该选择其中一种而不是另一种?
Why does Scala have both unapply
and unapplySeq
? What is the difference between the two? When should I prefer one over the other?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不深入细节并稍微简化一下:
对于常规参数
apply
构造和unapply
解结构:对于重复参数,
apply
构造和>unapplySeq
解结构:请注意,在第二种情况下,重复的参数被视为
Seq
以及A*
和_* 之间的相似性
。因此,如果您想对自然包含各种单个值的内容进行解构,请使用
unapply
。如果您想对包含Seq
的内容进行解构,请使用unapplySeq
。Without going into details and simplifying a bit:
For regular parameters
apply
constructs andunapply
de-structures:For repeated parameters,
apply
constructs andunapplySeq
de-structures:Note that in that second case, repeated parameters are treated like a
Seq
and the similarity betweenA*
and_*
.So if you want to de-structure something that naturally contains various single values, use
unapply
. If you want to de-structure something that contains aSeq
, useunapplySeq
.固定数量与可变数量。 Scala 中的模式匹配 (pdf)< /a> 通过镜像示例很好地解释了这一点。我在这个答案中也有镜像示例。
简言之:
那么,您认为下面的例子体现了哪一点?
Fixed-arity vs. variable arity. Pattern Matching in Scala (pdf) explains it well, with mirroring examples. I also have mirroring examples in this answer.
Briefly:
So, which do you think is exhibited in the following example?
一些例子:
Some examples: