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
类型错误吗?
答案 0 :(得分:4)
看起来像个错误。 {(1}}被推断为具有类型x
,虽然它是一个不可变类,但它被视为一个可变变量,导致Foo
失败,因为x.bar()
是一个不可变的方法。
解决方法是提供一个空的不可变构造函数,
bar()
导致immutable class Foo
{
void bar()
{
}
immutable this() {} // <---
}
表达式返回new Foo()
。