如何在K语言日志函数中获取调用方函数名(无额外参数)
在K语言中实现自动追加调用方函数名的.log.err日志函数
实现方案
直接重定义.log.err,利用K内置的调用上下文信息自动获取调用方函数名,无需额外参数,同时保持原有的性能与简洁性:
.log.err:{[msg] (-2; msg," ",first key value .z.p)[]}
验证示例
定义调用函数:
f1:{.log.err"log error msg"}
执行f1[]后,标准错误流会输出:
log error msg f1
原理说明
.z.p指向当前函数的父执行上下文,即调用.log.err的函数所在环境value .z.p解析该上下文的元数据,key提取其中的函数名标识,first取出唯一的函数名称- 原函数向标准错误(句柄-2)输出的核心逻辑完全保留,仅新增字符串拼接操作,性能损耗可忽略,未增加复杂度
边界情况说明
如果直接在全局作用域调用.log.err(而非函数内部),value .z.p会返回全局环境,此时first key value .z.p可能返回空或全局命名空间标识,可根据需求添加简单判断,但这属于可选扩展,不影响核心功能。
内容的提问来源于stack exchange,提问作者Rezzy
相关产品推荐
相关产品推荐

