gpt4 book ai didi

scala - 无法匹配 case 对象

转载 作者:行者123 更新时间:2023-12-01 09:23:57 25 4
gpt4 key购买 nike

试图为链表实现一个 super 简单的计数方法,但是当我尝试匹配我的案例对象的模式时,我得到了一个错误。

代码如下:

trait LinkedList[+A] {
def count = 0
}

case object Leaf extends LinkedList[Nothing]

case class Node[A](head: A, tail: LinkedList[A]) extends LinkedList[A] {
override def count: Int = this match {
case Node(_, t) => 1 + t.count
case Leaf => 0
}
}

这是错误:

scala> :load LinkedList.scala
Loading LinkedList.scala...
defined trait LinkedList
defined module Leaf
<console>:17: error: pattern type is incompatible with expected type;
found : Leaf.type
required: Node[A]
Note: if you intended to match against the class, try `case _: <none>`
case Leaf => 0
^

我不明白的是,我总是匹配这样的案例对象,但现在由于某种原因它不起作用......我该如何解决这个问题?

最佳答案

因为你匹配的是this,它是一个NodeLeaf 不是 Node,因此 this 永远不可能是 Leaf。编译器基本上是在告诉你 Leaf 的情况永远不会发生,所以你可能有一个错误。

要修复错误,请删除该案例。无论如何,您都不需要它,因为叶子案例由特征上定义的默认 count 方法处理。这意味着该方法应该简化为更直观:

override def count: Int = 1 + tail.count

或者将 count 方法移动到 trait:

trait LinkedList[+A] {
def count: Int = this match {
case Node(_, t) => 1 + t.count
case Leaf => 0
}
}

关于scala - 无法匹配 case 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28717399/

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