首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >突变状态

突变状态
EN

Stack Overflow用户
提问于 2015-09-23 16:20:47
回答 1查看 501关注 0票数 5

我刚刚开始学习素描,所以我希望这不是一个愚蠢的问题。

假设我们有一个对象

代码语言:javascript
复制
a = {x:1,y:2}

我们希望将x改为等于2。据我所知,如果我们使用ST monad,我们必须复制整个对象,以更改值。如果初始对象很大,这将是非常低效率的。什么是正确的方法来改变物体的位置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-23 19:31:51

ST monad是一种很好的方法,但取决于您的用例,可能有标准库函数,也可能没有标准库函数。

Data.StrMap模块在purescript-maps中为具有字符串键的同构记录定义了一个外部类型,因此如果您的值都具有相同的类型,则可以使用Data.StrMap.ST对记录进行适当的变异。

如果不是,您应该能够很容易地定义一个函数来使用ST和FFI来更新现有的记录。最棘手的一点是选择合适的类型。如果要对特定的键执行某些操作,则可以编写一个函数。

代码语言:javascript
复制
setFoo :: forall r a h eff. STRef h { foo :: a | r } -> a -> Eff (st :: ST h | eff) Unit

例如。在不失去类型安全性的情况下,定义泛型设置程序将更加困难。这是Data.StrMap所做的权衡:您将自己限制为单个值类型,但可以使用任意键。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32744692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档