Plu*_*tor 12 functional-programming immutability
我看到许多与函数式编程相关的主题都提到了破坏性更新.我知道它与变异类似,所以我理解更新部分.但破坏性的部分是什么?或者我只是过度思考它?
C. *_*ann 17
你可能有点过分思考它.可变性就是它的全部; 唯一被"摧毁"的是你所变异的先前价值.
假设您正在使用某种搜索树来存储值,并且您想要插入一个新值.找到新值所在的位置后,您有两种选择:
使用不可变树,您可以沿着从新值的位置到根的路径构造新节点.不在路径中的子树在新树中重复使用,如果您仍然可以使用原始树的根,则可以使用它们,并在它们之间共享公共子树.如果您有许多略微不同的副本,这可以节省空间而不需要额外的努力,当然,您拥有不可变数据结构的所有常见好处.
使用可变树,将新值附加到它所属的位置即可; 没有别的东西需要改变.这几乎总是更快,如果你只有一个副本,节省内存分配,但任何引用"旧"树的东西现在都引用了新的.原件已被销毁; 它永远消失了.如果你需要保留原件,你必须花费在更改之前创建整个事物的全新副本.
如果"破坏"似乎是一种描述简单的就地更新的不必要的苛刻方式,那么你可能没有花费太多时间来调试代码,以便找出地球背后某些值正在改变的背后.
| 归档时间: |
|
| 查看次数: |
3997 次 |
| 最近记录: |