wrapper - tcl:包装一个同名的proc

标签 wrapper tcl decorator proc-object

我想用一个具有相同名称和调用约定的 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/

相关文章:

java - 我们也有包装类的对象池吗?

python - 使用 python 包装脚本在 upstart 中启动和停止 celery 进程

regex - TCL字符串匹配与正则表达式

tcl - 格式错误的 expr 在 Tcl 中返回空字符串

python - 如何在派生的python类上操作装饰器?

java - 创建包装类来捕获方法执行时间

tcl - 如何在tcl中的许多文本中搜索某些行

python - 装饰器和类

java - 为什么我们需要装饰器设计模式中的装饰器?

c - 为什么在 C 编程中需要 Fortran 包装器?