在函数式编程中,不存在可变状态,每个操作都会返回一个新的世界状态。现在假设我有一个联系人列表和一个单独的联系人。
我要将Dirk添加到我的地址簿中。Dirk是我的地址簿的子对象,而我的地址簿是Dirk的父对象。但由于无法同时设置两个引用,我陷入了困境。父子关系应该定义一个无限循环,使得我可以永远从父对象走到子对象再走回同一父对象。
使用JavaScript语法:
我要将Dirk添加到我的地址簿中。Dirk是我的地址簿的子对象,而我的地址簿是Dirk的父对象。但由于无法同时设置两个引用,我陷入了困境。父子关系应该定义一个无限循环,使得我可以永远从父对象走到子对象再走回同一父对象。
使用JavaScript语法:
var addresses = new AddressBook();
var dirk = new Contact(addresses, 'Dirk', ...);
在第二行,我传递了没有Dirk的通讯录。 Dirk有一个父引用指向没有他的通讯录。
我怀疑答案,但我想确认一下。我是否实际上会改变状态来正确设置这个,还是有我忽略的一些技巧?
update-in/swap/fn/fn
是不是只是写(swap! state update-in [:address-book :my-address-book :entries] (fnil conj []) :dirk)
的一种复杂方式? - amalloy