如何在函数式编程中对不断变化的状态进行建模

How to model changing state in functional programming

我是 FP 和 Scala 的新手,我对如何以函数式方式有效地解决问题有疑问。

假设我有:

case class Store(storedObjects: List[StoreObject])

case class StoreObject(name: String)

我想将所有 StoreObjects 存储在 Store 中。

如果 Store case class 拥有的 List 是不可变的,我该如何添加新的 StoreObjects?

举第二个例子:假设我有一个case class Person,如下所示,

case class Person(name: String) 和一个名为 object PersonController

的对象

它拥有一个不可变的 Person 列表,每次我创建一个新的 Person 我都想将它添加到 PersonController.

的列表中

有没有办法在 fp 或模式中做到这一点?

或者切换到可变性是执行此类操作的唯一有效方法(由于多线程,这会很痛苦)。

感谢您的帮助 Exagon

how can i add new StoreObjects to the List the Store Class owns

用字段

定义一个正则class
var list = List()  

val list = mutable.List()

您可以在两种情况下更改此字段:第一种情况是通过重新分配 var,第二种情况是通过改变底层 mutable.List.

我更喜欢第一种方式 - var 使用不可变列表,因为您可以安全地在线程之间共享它。但是您必须确保 list 上的更新操作正确同步。

我认为你现在缺少的主要想法是 根本不 变异的可能性,但实际上用你的 addition/removal 的结果创建一个新对象操作。

用于添加...例如以下内容:

def add(sObject: StoreObject, store: Store) = store.copy(storedObjects = store.storedObjects :+ sObject)

这将 return 一个新的 Store 保存列表。

希望这是有道理的并回答您的疑问。