我想用一个具有相同名称和调用约定的 proc 替换“proc N”的定义,但需要一些额外的错误检测代码。
在 python 中,我可以像下面那样做我想做的事,但我不了解命名空间和函数句柄在 tcl 中是如何工作的。
__orig_N = N
def N(arg1, arg2):
if arg1 != 'GOOD VALUE':
exit('arg1 is bad')
return __orig_N(arg1, arg2)
最佳答案
您可以使用 rename
重命名现有过程的命令:
rename N __orig_N
proc N {arg1 arg2} {
if { $arg1 != "GOOD_VALUE" } {
puts stderr "arg1 is bad"
exit 1
}
return [uplevel 1 __orig_N $arg1 $arg2]
}
这实际上比 python 原始的要复杂一点,因为使用
uplevel
有效地完全从调用堆栈中删除了包装器——诚然,在你的情况下这可能不是必需的,但能够做到这一点很好。
关于wrapper - tcl:包装一个同名的proc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6114743/