【发布时间】:2009-06-17 18:31:54
【问题描述】:
在玩 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 函数中没有报错?
【问题讨论】:
-
我一直在尝试清理pure 标签,因为它有时指的是纯虚函数,有时指的是pure,有时指的是pure - 等等。但我对d2 一无所知。您能否确认我的标签编辑是否合适? purely-functional 可以解决这个问题吗?我创建了pure-function,所以如果purely-functional 有效,我认为使用现有标签会更好。
标签: d pure-function