d2:部分已知结构的不变性

时间:2012-04-08 21:17:25

标签: immutability d

在D中,immutable是可传递的,因此禁止对任何不可变结构字段进行赋值。据我所知,不可变结构变量强烈保证永远不会更改,以及它的所有内容。

但是,如果我宣布了这样的事情呢?

struct OpaqueData;
immutable(OpaqueData*) data;

D如何保证在D中没有实现并且可能具有间接性的结构的传递不变性?

在不可变类中将这种指针封装到不透明数据的正确方法是什么?

1 个答案:

答案 0 :(得分:5)

由于您不知道OpaqueData中的任何字段,因此您无法首先分配任何字段。

当然,您可以通过抛弃immutable(D确实赋予您这样做的权力)完全打破类型系统并将OpaqueData*值分配给原始内存,但是然后你会问你最终会遇到什么问题......如果你不这样做并且尊重你的OpaqueData指针是immutable,你就不能以任何方式改变它类型限定符的传递性质。

事实上,这是他们的全部观点:它们在数学上是合理的。