Scala 中案例类的值可以包含自身吗?

问题描述 投票:0回答:1

给定一棵具有以下形状的树:

enum Tree
  case Node(left: Tree, right:Tree)
  case Leaf

是否可以创建一个值

n:Node
,使得
n.left == n || n.right == n
val n:Node = Node(n,n)
不起作用,但是是否有编译时保证不存在这样的值?对于一般的案例类是否有这样的保证(即
a.a==a
可能永远不会适用于任何
a:A
,其中
A
是一个案例类)?

一些额外的背景: 我遇到这个问题是因为我需要知道

Tree
的集合是否构成一棵结构良好的树,并且在某一时刻想要检查该集合是否有任何引用自身的
Node
.

scala class recursion case
1个回答
0
投票
scala>
  sealed trait Tree
  case class Node(left: Tree, right: Tree) extends Tree
  case object Leaf extends Tree
scala>
defined trait Tree
defined class Node
defined object Leaf
scala> Node(Leaf, Leaf)
res1: Node = Node(Leaf,Leaf)

scala> Node(Leaf, Node(Leaf, Leaf))
res2: Node = Node(Leaf,Node(Leaf,Leaf))
© www.soinside.com 2019 - 2024. All rights reserved.