我在F#中设计一个游戏对象.在C++中,我会创建类来表示每个动态值的图形方面,物理等,然后将这些类的实例添加到GameObject.我可以在F#中使用与可变类型相同的设计,但我试图保持一切不可变.因此,如果我使用相同的设计,我将每帧重新创建数千个大对象,并且可能花费所有cpu时间来分配.
有没有什么方法可以定义一个类型,我可以链接到另一个对象的值并提供新的值,以减少分配?
例如,为了改变盒子的颜色,我想使用旧盒子的内存和新的图形片段,并使用旧图形片段的内存和新颜色:
let box = ...
...
let changedBox = {box with
graphics = { box.graphics with colour = blue} }
Run Code Online (Sandbox Code Playgroud)
对,就是这样.假设"大对象"实际上是许多较小对象的参考图形,那么典型的"不可变更新"只会创建一个或两个新的小对象,并为其余的引用相同的旧对象.
例如,如果Person有一个名称和地址,而Address有一个Street和City,State和Zip,我需要更新一个人的zip,那么我只需要为根目录创建生成树的新对象邮编.请参阅此博客中的红黑色图.在person示例中,Name,Street,City和State对象将被重用,但ZIp将是一个新对象,而Address将是一个新对象(因为它包含新的Zip),而Person将是一个新对象(因为它包含新地址).是否有意义?
| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |