2
immutable class Foo
{
    void bar()
    {
    }
}

void main()
{
    auto x = new Foo();
    x.bar();
    // Error: function test.Foo.bar () immutable is not callable
    //         using argument types ()
}

我必须在程序中进行哪些更改才能x.bar()编译?是否x有错误的类型?

4

1 回答 1

4

看起来像一个错误。x推断有 type Foo,虽然它是一个不可变的类,但它被视为一个可变变量,这导致x.bar()失败,因为bar()它是一个不可变的方法。

一种解决方法是提供一个空的不可变构造函数,

immutable class Foo
{
    void bar()
    {
    }

    immutable this() {}    // <---
}

这导致new Foo()表达式返回一个immutable(Foo).

于 2012-08-08T09:06:59.780 回答