首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Haskell @更新记录中的单个字段

用Haskell @更新记录中的单个字段
EN

Stack Overflow用户
提问于 2017-04-10 00:38:22
回答 1查看 2.3K关注 0票数 3

我需要更新一个非常大的默认记录的一个字段。

由于默认值可能会更改,所以我不希望手动重新生成整个记录。

现在我遇到了这样做的方式,但我不知道它是如何工作的:

代码语言:javascript
复制
unaggregate :: MyResult -> MyResult
unaggregate calc@MyResult{..} = calc{ the_defaults = the_override
                                         `mappend` the_defaults }
  where
    the_override = create ("aggregation" := False)

我已经尝试搜索'Haskell @ operator‘在谷歌,但它没有立即返回有用的信息。

我在某个地方看到calc@MyResult{..}对变量进行模式匹配,但我不知道calcMyResult记录做了什么.

我还查过mappend (和Monoids),我也不知道这些是如何工作的.

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-10 01:13:38

@符号被称为“作为模式”。在上面的例子中,您可以使用calc来表示整个记录。通常你会像这样使用它:calc@(MyResult someResult) --这样你就可以得到所有的东西和你要匹配的部分。您可以对列表(myList@(myHead:myTail))或元组(myTuple@(myFst, mySnd) )做同样的事情。很方便!

MyResult{..}使用RecordWildcards。这是一个整洁的扩展!但是RecordWildcards并不能帮助您只更新记录的一个字段。

您可以这样做:calc { theFieldYouWantToUpdate = somethingNew }

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

https://stackoverflow.com/questions/43313433

复制
相关文章

相似问题

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