我正在用F#设计一个游戏对象。在C++中,我会创建类来表示图形方面、物理方面等,每个类都有动态值,然后将这些类的实例添加到GameObject中。我可以在F#中对可变类型使用相同的设计,但我试图保持所有内容都是不可变的。因此,如果我使用相同的设计,我将在每帧中重新创建数千个大对象,并且可能将所有cpu时间都花在分配上。
有没有什么方法可以定义一个类型,使我可以链接到另一个对象的值并提供新的值,以减少分配?
例如,要更改框的颜色,我想使用旧框的内存和新的图形块,并使用旧图形块的内存和新的颜色:
let box = ...
...
let changedBox = {box with
graphics = { box.graphics with colour = blue} }发布于 2010-07-27 07:05:39
是的,完全正确。假设“大对象”实际上是许多小对象的参考图,那么典型的“不可变对象的更新”只是创建一个或两个新的小对象,并为其余对象引用相同的旧对象。
例如,如果person有姓名和地址,Address有Street和City,State和Zip,而我需要更新Person的邮政编码,那么我只需要为从根到邮政编码的生成树创建新对象。例如,请参阅this blog中的红黑色图。在person示例中,将重用Name、Street、City和State对象,但ZIp将是新对象,Address将是新对象(因为它包含新邮政编码),Person将是新对象(因为它包含新地址)。这有意义吗?
https://stackoverflow.com/questions/3339133
复制相似问题