在玩 D 2.0 时,我发现了以下问题:
示例 1:
pure string[] run1()
{
string[] msg;
msg ~= "Test";
msg ~= "this.";
return msg;
}
这可以按预期编译和工作。
当我尝试将字符串数组包装在一个类中时,我发现我无法让它工作:
class TestPure
{
string[] msg;
void addMsg( string s )
{
msg ~= s;
}
};
pure TestPure run2()
{
TestPure t = new TestPure();
t.addMsg("Test");
t.addMsg("this.");
return t;
}
此代码不会编译,因为 addMsg 函数不纯。我无法使该函数成为纯函数,因为它会更改 TestPure 对象。我错过了什么吗?或者这是一个限制?
以下确实编译:
pure TestPure run3()
{
TestPure t = new TestPure();
t.msg ~= "Test";
t.msg ~= "this.";
return t;
}
~= 运算符不会被实现为 msg 数组的不纯函数吗?为什么编译器在 run1 函数中没有抱怨呢?