gpt4 book ai didi

scala - 是否可以将 `case object`与类型参数一起使用?

转载 作者:行者123 更新时间:2023-12-04 03:20:31 27 4
gpt4 key购买 nike

我目前正在学习Scala,并想复制此Haskell代数数据类型:

data Tree = Empty
| Leaf Int
| Node Tree Tree

这是我在Scala中想到的:
sealed trait Tree[T]
case class Empty[T]() extends Tree[T]
case class Leaf[T](value: T) extends Tree[T]
case class Node[T](left: Tree[T], right: Tree[T]) extends Tree[T]

但是,有人告诉我,我应该对 case object使用 Empty,我认为这是正确的,因为它不带参数-但是同样,它确实需要类型参数。

我尝试了以下方法,但没有一个可以编译:
case object Empty[T] extends Tree[T]
case object Empty extends Tree[T]
case object Empty extends Tree

所以我想知道是否有一种在这种情况下使用 case object的方法。

最佳答案

单例不能通用,因为只有一个。如果您希望Tree是协变的(即Tree[Int]Tree[Any]的子类型),则可以将类型定义为

sealed trait Tree[+T]
case object Empty extends Tree[Nothing]

否则,将其保留为案例类。

关于scala - 是否可以将 `case object`与类型参数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28681288/

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