【发布时间】:2014-08-19 22:29:14
【问题描述】:
在 D 中,假设我有一个类似的函数:
private static double vecMult(immutable Vector v1, immutable Vector v2) pure {
double sum = 0.0;
foreach(ulong k; v1.keys)
sum += v1[k] * v2[k];
return sum;
}
现在,假设出于调试或测试目的,我想插入如下内容:
private static double vecMult(immutable Vector v1, immutable Vector v2) pure {
double sum = 0.0;
foreach(ulong k; v1.keys)
if(!(k in v2)){
writeln(k);
exit(1);
}
sum += v1[k] * v2[k];
return sum;
}
这样,如果发生错误情况,我就知道是什么原因造成的(我可以稍后将它放在调试块中)。
现在,由于 writeln 不是纯的,vecMult 也不再是纯的。如果 vecMult 是由其他纯函数调用的低级函数,它调用其他纯函数,那么从 vecMult 中删除“pure”关键字是不平凡的。
有没有一种很好的方法可以从纯函数中获取调试输出而不使其成为非纯函数?
【问题讨论】:
标签: d