[英]Out-of-date state using state monad
这是一个使用状态monad的功能runGame
:
runGame = do
state <- get
addPoints
let newState = ...modify state in some way...
put newState
现在假设我也修改了addPoints
的状态:
addPoints = do
modify (+1)
问题是,我在runGame
的状态现在已过时。 因此,当我修改该状态并将其放回原处时,我已经取消了addPoints
的更改。
解决这个问题的好方法是什么? 我不想在每次函数调用“以防万一”后修改状态后重新get
状态。 我可以切换到始终使用modify
而不是get
和put
但这会使我的代码尴尬。
您正在寻找对状态的原子/事务修改,这几乎就是modify
提供的。 这是不可能的“滑”的之间的一些状态修改操作get
和put
与modify
。 如果不使用它,则必须管理确保在get
和put
之间什么都不会发生的复杂性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.