On 02/07/2015 06:35 AM, Danny wrote:

> I'm trying to use immutable class instances and that seems to be really
> difficult.

You are not alone. :)

Just some reminders:

- immutable is a requirement that may not be usable with every type.

- immutable string foo() {} is a member function that works on immutable objects. For that reason, that 'immutable' is recommended to appear after the parameter list:

string foo() immutable {}

> For example, with the following program I get an internal compiler error:

It generates regular compilation errors with dmd git head.

>      override immutable string toString() {

I received the following error for the toString() function above as there is no 'Object.toString immutable' to override:

Error: function deneme.Attrsp.toString does not override any function, did you mean to override 'object.Object.toString'?

>          for(i = 0U; i < MAX_COMPRESSED_ATTRS; ++i) {
>              if(codes[i] is null) {

I received the followin compilation error for the line above:

Error: non-shared inout method std.typecons.Rebindable!(immutable(Attrsp)).Rebindable.RebindableCommon!(immutable(Attrsp), Attrsp, Rebindable!(immutable(Attrsp))).get is not callable using a shared mutable object

> I'm not even trying to modify the contents of the instance, I'm
> just trying to assign another one to the array slot

That would be a violation of immutable, no?

> (actually not even another one - it was null before).

The compiler does not keep track of variables to see that it is null. Since immutable (and const) are transitive, it does not allow rebinding a class reference.

Ali

Reply via email to