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これは不変クラスですが、不変メソッドであるため失敗のFoo原因となった可変変数のように扱われます。x.bar()bar()

回避策は、空の不変コンストラクター関数を提供することです。

immutable class Foo
{
    void bar()
    {
    }

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

これにより、new Foo()式は を返しましたimmutable(Foo)

于 2012-08-08T09:06:59.780 に答える