我刚刚完成了Coursera上Martin Odersky的scala课程。作为我的第一门函数式编程语言,我对限制可变状态的想法感到兴奋。这样可以更容易地进行并发操作,同时也使代码更加易于维护。
在学习过程中,我意识到只要一个对象没有可变变量且仅引用不可变对象,就可以保证其不可变性。因此,现在我可以通过创建新状态来完成所有操作,而无需修改旧状态,并尽可能使用尾递归。
很好。所以我只能在一定程度上做到这一点。在某些时候,我的应用程序需要能够修改一些现有状态。我知道在这一点上要放置并发控制,锁等等。但我仍然默认使用我一直使用的标准多线程并发控制。
哦,scala社区,有更好的方法吗?也许是单子?
编辑:这个问题有点普遍化,所以我想举一个用例: 我有一个机器学习算法,存储着几个数据集合。它们有返回更新后数据表示的函数(如训练等),全部是不可变的。最终,我可以将这种返回-更新状态的模式延续到运行模拟的实际对象。这个对象持有对集合的引用,因此它具有可变状态。我可能希望将其分布到多个核心或多个系统中。