【发布时间】:2015-04-11 11:53:13
【问题描述】:
是否可以在运行时在 D 中填充不可变对象的数组或关联数组?我有一组不可变的定义,其数据是在运行时从外部源读取的。每个定义还包含其他几个不可变对象的数组。但是,编译器似乎禁止使用循环实例化不可变数组。在本例中(简化字段数据):
immutable class Definition {
string name;
int size;
immutable(Field)[string] fields;
immutable class Field {
int num;
this (int num) {
this.num = num;
}
}
this(string name, int size) {
this.name = name;
this.size = size;
foreach (i; 0..size) {
string key = [cast(char)('a' + i)]; // a, b, c...
auto field = new immutable(Field)(i);
fields[key] = field; // ERROR
}
}
}
class Instance {
Definition def;
void speak() {
writefln("I am currently referencing definition '%s' (%d)", def.name, def.size);
}
}
auto defA = new immutable(Definition)("AAA", 4);
auto defB = new immutable(Definition)("BBB", 6);
auto instance = new Instance();
instance.def = cast(Definition) defA;
instance.speak();
instance.def = cast(Definition) defB;
instance.speak();
我收到错误:循环中或标签后不允许不可变字段“字段”初始化。有没有办法解决这个问题,或者有更好的方法来完成它?还是我走错了路?
【问题讨论】:
标签: immutability d