gpt4 book ai didi

scala - 为什么我不能匹配 Seq.empty?

转载 作者:行者123 更新时间:2023-12-04 07:33:39 26 4
gpt4 key购买 nike

我尝试匹配这样的序列:

val users: Seq[User] = ....

users match {
case Seq.empty => ....
case ..
}

我收到一条错误消息:
stable identifier required, but scala.this.Predef.Set.empty found.

有人可以解释为什么我不能这样做吗?即它背后的理论

最佳答案

两者 Seq.applySeq.emptyGenericCompanion 中实现,其中没有 unapply方法,所以你会认为模式匹配是不可能的,但你仍然可以在 Seq() 上进行模式匹配因为 Seq.unapplySeq() ,在 SeqFactory 中实现,使其可用。

来自 unapplySeq()文档:

This method is called in a pattern match { case Seq(...) => }.



更多背景

集合通过 unapplySeq() 使模式匹配成为可能方法,当编译器看到类似 case List() => ... 的内容时会调用该方法.

有趣的是 List(42)List.apply(42) 是一样的但在模式匹配中并非如此:
lst match {
case List(8) => ... // OK
case List.apply(8) => ... // won't compile
}

同样的原则适用于 Seq()Seq.empty .

关于scala - 为什么我不能匹配 Seq.empty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474291/

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