3
状态,ST,IORef和MVar之间的区别
我正在48小时内完成“ 编写自己的计划”(我大约需要85小时),并且已经完成了有关添加变量和赋值的部分。本章在概念上有很大的跳跃,我希望它分两步完成,并且在两者之间进行了很好的重构,而不是直接跳转到最终解决方案。无论如何… 我迷路了一些不同类的,似乎达到相同的目的:State,ST,IORef,和MVar。文本中提到了前三个,而后三个似乎是很多有关前三个的StackOverflow问题的首选答案。它们似乎在连续调用之间都带有状态。 这些分别是什么,它们又有何不同? 这些句子尤其没有意义: 相反,我们使用一种称为状态线程的功能,让Haskell为我们管理聚合状态。这使我们能够像使用任何其他编程语言一样对待可变变量,使用函数来获取或设置变量。 和 IORef模块使您可以在IO monad中使用状态变量。 所有这些使这条线变得type ENV = IORef [(String, IORef LispVal)]混乱-为什么第二条IORef呢?如果我改写会type ENV = State [(String, LispVal)]怎样?