C语言中的干缓存
我希望将以下C代码晾干:C语言中的干缓存,c,dry,memoization,C,Dry,Memoization,我希望将以下C代码晾干: if (i < SIZE_OF_V) { if (V[i]) K = V[d]; else K = V[d] = (expensive complicated call); } else { K = (expensive complicated call); } if(i
if (i < SIZE_OF_V) {
if (V[i])
K = V[d];
else
K = V[d] = (expensive complicated call);
} else {
K = (expensive complicated call);
}
if(i
有什么建议吗?本地宏可以工作,但我更喜欢更现代的替代方案。您只需简单地执行即可
if (i < SIZE_OF_V && V[i]) {
K = V[d];
} else {
K = (expensive complicated call);
if (i < SIZE_OF_V)
V[d] = K;
}
我没听清单词
DRY
你能不能?@Omkant DRY:“不要重复你自己”啊哈哈。。。这样的缩写。。谢谢@ascii-lime@Charles保持原样我发现你的代码比下面的alestanis的代码更容易理解。@Charles,你为什么不把它放在一个函数中呢?仍然有I
的微小重复,但是你也可以通过将比较结果存储在第一个if()之前的一个变量中来删除它
@caf这真的比只计算一次整数比较好吗?;)几乎可以肯定的是,经过编译后,这一点是相同的,这取决于OP的原教旨主义程度;)
int myExpensiveAndComplicatedCall() {
// Do things
}
if (i < SIZE_OF_V) {
if (V[i])
K = V[d];
else
K = V[d] = myExpensiveAndComplicatedCall();
} else {
K = myExpensiveAndComplicatedCall();
}