在 Scala 中更新节点的值?
Updating value of node in Scala?
我有这个代码
tree match {
case EmptyNode =>
//do stuff with empty node
case Node(left, right, value) =>
//do stuff with node contents
}
但是如果我想更新节点的值怎么办?我试过在case里面做value = newValue,但是好像是不允许的
我的trees/nodes结构:
sealed trait Tree
case class Node(var left: Tree, var right: Tree, var value: String) extends Tree
case object EmptyNode extends Tree
您可以使用@
符号引用实际节点:
case n@Node(left, right, value) => n.value = "newValue"
Noah 的回答确实显示了更改节点值的方法,但您不应该那样做。 scala 的主要思想之一是促进不可变数据结构,即一旦定义了一个对象,就不会更改它。
这在树中尤为重要,因为通过更改节点的值,您可能会使树不一致(节点左侧的值可能不再更小)。相反,始终保持节点值不可变,并根据需要添加或删除节点,注意删除节点时树的重新平衡。
我有这个代码
tree match {
case EmptyNode =>
//do stuff with empty node
case Node(left, right, value) =>
//do stuff with node contents
}
但是如果我想更新节点的值怎么办?我试过在case里面做value = newValue,但是好像是不允许的
我的trees/nodes结构:
sealed trait Tree
case class Node(var left: Tree, var right: Tree, var value: String) extends Tree
case object EmptyNode extends Tree
您可以使用@
符号引用实际节点:
case n@Node(left, right, value) => n.value = "newValue"
Noah 的回答确实显示了更改节点值的方法,但您不应该那样做。 scala 的主要思想之一是促进不可变数据结构,即一旦定义了一个对象,就不会更改它。
这在树中尤为重要,因为通过更改节点的值,您可能会使树不一致(节点左侧的值可能不再更小)。相反,始终保持节点值不可变,并根据需要添加或删除节点,注意删除节点时树的重新平衡。