KDB:嵌套字典内嵌套函数无法按预期执行的技术求助
解决嵌套字典与函数结合的营收计算问题
原代码核心问题
- 命名空间引用错误:原代码中
inv.net_price缺少根命名空间前缀.,且未正确引用当前产品条目下的函数 - 函数逻辑冗余:
rev函数重复计算price-cogs,未复用已定义的net_price函数 - 函数仅定义未执行:仅定义了函数但未执行赋值,无法得到实际计算结果
修正后的实现方案
将每个产品的属性(数据+专属函数)封装为独立字典,函数内部通过传入的字典引用自身属性,确保调用时动态计算最新值:
// 初始化prodA的完整字典(含数据与专属函数) .inv.prodA: (`qty`price`cogs`net_price`rev)! ( 10#10; // 库存数量 10#2.75; // 单价 10#1.35; // 成本 {x[`price]-x[`cogs]}; // 专属净价计算函数 {x[`qty] * x[`net_price][x]} // 专属营收计算函数 ) // 计算并获取prodA营收 .inv.prodA[`rev][.inv.prodA] // 初始化prodB的完整字典(rev函数逻辑定制) .inv.prodB: (`qty`price`cogs`net_price`rev)! ( 20#2.5; // 库存数量 20#1.5; // 单价 20#0.25; // 成本 {x[`price]-x[`cogs]}; // 净价计算函数 {x[`qty] * x[`net_price][x] * 0.5} // 定制化营收计算函数(乘以0.5) ) // 计算并获取prodB营收 .inv.prodB[`rev][.inv.prodB] // 总营收计算函数,自动调用各产品的营收函数 .inv.total.rev: {x[`prodA][`rev][x[`prodA]] + x[`prodB][`rev][x[`prodB]]} // 计算总营收 .inv.total.rev[.inv]
动态更新扩展
如果需要修改数据后自动重新计算营收,可以封装setter函数:
// 定义prodA的营收更新钩子 .inv.prodA.updateRev: {[d] d[`rev]: d[`qty] * d[`net_price][d]; d} // 修改库存数量后自动更新营收 .inv.prodA: .inv.prodA.updateRev[.inv.prodA upsert `qty`15#10]
内容的提问来源于stack exchange,提问作者Jason_L
相关产品推荐
相关产品推荐

