gpt4 book ai didi

scala - unapply 和 unapplySeq 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 07:40:29 25 4
gpt4 key购买 nike

为什么 Scala 同时具有 unapplyunapplySeq?两者有什么区别?我什么时候应该选择其中一种而不是另一种?

最佳答案

无需深入细节并稍微简化一下:

对于常规参数apply构造和unapply解构:

object S {
def apply(a: A):S = ... // makes a S from an A
def unapply(s: S): Option[A] = ... // retrieve the A from the S
}
val s = S(a)
s match { case S(a) => a }

对于重复参数,apply 构造和 unapplySeq 解构:

object M {
def apply(a: A*): M = ......... // makes a M from an As.
def unapplySeq(m: M): Option[Seq[A]] = ... // retrieve the As from the M
}
val m = M(a1, a2, a3)
m match { case M(a1, a2, a3) => ... }
m match { case M(a, as @ _*) => ... }

请注意,在第二种情况下,重复的参数将被视为 Seq 以及 A*_* 之间的相似性。

因此,如果您想对自然包含各种单个值的内容进行解构,请使用unapply。如果您想对包含 Seq 的内容进行解构,请使用 unapplySeq

关于scala - unapply 和 unapplySeq 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com