什么是破坏性更新?

Plu*_*tor 12 functional-programming immutability

我看到许多与函数式编程相关的主题都提到了破坏性更新.我知道它与变异类似,所以我理解更新部分.但破坏性的部分是什么?或者我只是过度思考它?

C. *_*ann 17

你可能有点过分思考它.可变性就是它的全部; 唯一被"摧毁"的是你所变异的先前价值.

假设您正在使用某种搜索树来存储值,并且您想要插入一个新值.找到新值所在的位置后,您有两种选择:

  • 使用不可变树,您可以沿着从新值的位置到根的路径构造新节点.不在路径中的子树在新树中重复使用,如果您仍然可以使用原始树的根,则可以使用它们,并在它们之间共享公共子树.如果您有许多略微不同的副本,这可以节省空间而不需要额外的努力,当然,您拥有不可变数据结构的所有常见好处.

  • 使用可变树,将新值附加到它所属的位置即可; 没有别的东西需要改变.这几乎总是更快,如果你只有一个副本,节省内存分配,但任何引用"旧"树的东西现在都引用了新的.原件已被销毁; 它永远消失了.如果你需要保留原件,你必须花费更改之前创建整个事物的全新副本.

如果"破坏"似乎是一种描述简单的就地更新的不必要的苛刻方式,那么你可能没有花费太多时间来调试代码,以便找出地球背后某些值正在改变的背后.

  • @Plumenator:是的."更新"都非常具有前瞻性和乐观性,但可变性的缺点几乎总是涉及*使用*的问题,而不是现在的问题.因此,"破坏性更新"这个术语很适合平衡事物,并明确表示你们正在跨越桥梁并将它们烧在身后. (3认同)