scala - 如何在Scala中复制对象?

scala - 如何在Scala中复制对象?,第1张

我有这个树结构

sealed trait Tree
case class Node(var left: Tree, var right: Tree, var value: String) extends Tree
case object EmptyNode extends Tree

和一个名为myTree的Tree对象。我想创建另一个具有完全相同结构和值的树,名为otherTree,但myTree.clone()不起作用。我还能做什么?

最佳答案:

2 个答案:

答案 0 :(得分:4)

这样的内容会复制您的list.el.on('click', 'button', function(e) { if (list.dragEl) { return; } var target = $(e.currentTarget), action = target.data('action'), item = target.parent(list.options.itemNodeName); if (action === 'collapse') { list.collapseItem(item); } if (action === 'expand') { list.expandItem(item); } }); var onStartEvent = function(e) { var handle = $(e.target); /* callback for beforeDragStart */ list.el.trigger('beforeDragStart', [handle]); if (!handle.hasClass(list.options.handleClass)) { if (handle.closest('.' list.options.noDragClass).length) { return; } handle = handle.closest('.' list.options.handleClass); } if (!handle.length || list.dragEl) { return; } list.isTouch = /^touch/.test(e.type); if (list.isTouch && e.touches.length !== 1) { return; } e.preventDefault(); list.dragStart(e.touches ? e.touches[0] : e); /* callback for dragStart */ var item = list.dragEl.find('.' list.options.itemClass); list.dragRootEl.trigger('dragStart', [ item, // List item list.el // Source list ]); };

Tree

答案 1 :(得分:0)

只是为了完整性 - 因为问题要求“如何复制......”#39;并且您提到了clone():您可以使用copy()方法复制案例类。然而,它对一个可变的树结构没有帮助。但是具有不可变结构(如Gregor所建议的那样),例如像这样

sealed trait Tree
case class Node(left: Tree, right: Tree, value: String) extends Tree
case object EmptyNode extends Tree { override def toString = " _ " }

和一些数据

scala> val leaf1 = Node(EmptyNode, EmptyNode, "leaf1")
scala> val leaf2 = Node(EmptyNode, EmptyNode, "leaf2")
scala> val tree1 = Node(leaf1, leaf2, "tree1")
scala> tree1
res0: Node = Node(Node( _ , _ ,leaf1),Node( _ , _ ,leaf2),tree1)

你可以像这样复制你的树

scala> val tree2 = tree1.copy(value = "tree2")
tree2: Node = Node(Node( _ , _ ,leaf1),Node( _ , _ ,leaf2),tree2)

scala> val tree3 = Node(tree1.left, tree1.right, "tree3")
tree3: Node = Node(Node( _ , _ ,leaf1),Node( _ , _ ,leaf2),tree3)

与不可变实例一样,对于更新,您需要创建新的树结构,例如使用递归操作,如Noah的答案。

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复