如何创建对不可变类的可重新分配引用?

时间:2017-06-24 20:19:46

标签: immutability d

如何创建对不可变类的引用,但在保留重新分配引用的能力的同时,有点像string

import std.stdio;

immutable class Test {
    string test(){
        return "test";
    }
}

void main(){
    auto test = new Test;
    writeln(test.test);
}

这会导致错误,因为创建的实例不是不可变的:

test.d(14): Error: immutable method test.Test.test is not callable using a mutable object

new immutable也不起作用,因为之后无法为结果变量分配新变量。

immutable(Test)*会起作用,但有没有办法避免使用指针?

2 个答案:

答案 0 :(得分:4)

使用std.typecons.Rebindable http://dpldocs.info/experimental-docs/std.typecons.Rebindable.html#examples

import std.typecons;
class Widget { int x; int y() const { return x; } }
auto a = Rebindable!(const Widget)(new Widget);
// Fine
a.y();
// error! can't modify const a
// a.x = 5;
// Fine
a = new Widget;

答案 1 :(得分:0)

您可以immutable使用auto来推断类型:

immutable test       = new Test;
immutable other_test = test;