如何在函数式编程中对不断变化的状态进行建模
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
保存列表。
希望这是有道理的并回答您的疑问。
我是 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
用字段
定义一个正则classvar 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
保存列表。
希望这是有道理的并回答您的疑问。