gpt4 book ai didi

data-structures - 在 Scala 中扩展现有的数据结构

转载 作者:行者123 更新时间:2023-12-04 06:58:57 25 4
gpt4 key购买 nike

我有一个用 Scala 定义的普通树。

sealed abstract class Tree
object Tree {
case class Node (...) extends Tree
case class Leaf (...) extends Tree
}

现在我想给树中的所有节点和叶子添加一个成员变量。是否可以使用 extend 关键字,或者我是否必须通过添加 [T] 来修改树类?

更新:
看来我的问题被误解了。示例应该清除它:

我需要这个树结构(实际上是更复杂的东西)在一个上下文中有两个 double 。在另一种情况下,我需要它有一个字符串。然而在另一种情况下,我需要没有任何(附加)成员的纯树。我希望前两个变体成为第三个​​变体。伪代码:

DTree extends Tree with Touple2[Double, Double]
object DTree {
case class Node (...) extends Tree.Node with Touple2[Double, Double]
case class Leaf (...) extends Tree.Leaf with Touple2[Double, Double]
}

STree extends Tree with String
object DTree {
case class Node (...) extends Tree.Node with String
case class Leaf (...) extends Tree.Leaf with String
}

...

def f (t : Tree) { ... }

我希望 f 能够处理所有的树。

最佳答案

如果我没理解错的话,您希望您的某些树节点的类型具有该类型的字段。我认为 abstract type是你要找的。它们就像泛型,但更适合子类化。像这样。

sealed abstract class Tree

trait TypedTree {
type T
val value:T
}

然后,当我修改您的示例时,会导致:

trait DTree extends TypedTree {
type T = Touple2[Double, Double]
}
object DTree {
case class Node (...) extends Tree.Node with DTree
case class Leaf (...) extends Tree.Leaf with DTree
}

trait STree extends TypedTree {
type T = String
}
object DTree {
case class Node (...) extends Tree.Node with STree
case class Leaf (...) extends Tree.Leaf with STree
}

这增加了一个间接级别。但我觉得你在一步中将某些东西概念化,而这需要两个步骤。

关于data-structures - 在 Scala 中扩展现有的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2797164/

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