首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用更新的片段定义大型不可变类型的正确方式?

用更新的片段定义大型不可变类型的正确方式?
EN

Stack Overflow用户
提问于 2010-07-27 05:28:03
回答 1查看 192关注 0票数 5

我正在用F#设计一个游戏对象。在C++中,我会创建类来表示图形方面、物理方面等,每个类都有动态值,然后将这些类的实例添加到GameObject中。我可以在F#中对可变类型使用相同的设计,但我试图保持所有内容都是不可变的。因此,如果我使用相同的设计,我将在每帧中重新创建数千个大对象,并且可能将所有cpu时间都花在分配上。

有没有什么方法可以定义一个类型,使我可以链接到另一个对象的值并提供新的值,以减少分配?

例如,要更改框的颜色,我想使用旧框的内存和新的图形块,并使用旧图形块的内存和新的颜色:

代码语言:javascript
复制
let box = ...
...

let changedBox = {box with 
                 graphics = { box.graphics with colour = blue} }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-27 07:05:39

是的,完全正确。假设“大对象”实际上是许多小对象的参考图,那么典型的“不可变对象的更新”只是创建一个或两个新的小对象,并为其余对象引用相同的旧对象。

例如,如果person有姓名和地址,Address有Street和City,State和Zip,而我需要更新Person的邮政编码,那么我只需要为从根到邮政编码的生成树创建新对象。例如,请参阅this blog中的红黑色图。在person示例中,将重用Name、Street、City和State对象,但ZIp将是新对象,Address将是新对象(因为它包含新邮政编码),Person将是新对象(因为它包含新地址)。这有意义吗?

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

https://stackoverflow.com/questions/3339133

复制
相关文章

相似问题

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