std.complex设计背后的原因是什么?

时间:2012-10-05 21:57:20

标签: d phobos

unittest
{
  immutable float a = 1.1, b = 1.2;
  auto c1 = complex(a,b);
  auto r1 = c1 + c1;  //  error, not mutable
}

这意味着我可以拥有Complex!(immutable float),但我永远不能将opBinary函数用于另一个Complex!(immutable float)实例。那么,为什么std.complex以这种方式实现呢?

这是opBinary。它会调用opOpAssign,这不会与immutable一起使用,因此会出错。

Complex!(CommonType!(T,R)) opBinary(string op, R)(Complex!R z) const
{
    alias typeof(return) C;
    auto w = C(this.re, this.im);
    return w.opOpAssign!(op)(z);
}

1 个答案:

答案 0 :(得分:3)

我会说这是一个错误。当然,如果它不是一个bug,那就是一个糟糕的设计。但是看一下opOpAssign的代码以及有多少代码,我的猜测是他们试图避免代码重复而忘记考虑他们正在做的事情不适用于{{1 }}。我建议你report it as a bug