n00*_*mer 3 tcl c-preprocessor
tcl 中是否有等价于 C++ #define 的命令?我已经看到了使用 proc 函数重载来实现“定义”的方法,只是想知道是否有人知道更直接的方法
使用的interp alias允许您使用的内容a,并b在别名创建时间:
interp alias {} foo_ab {} foo $a $b
Run Code Online (Sandbox Code Playgroud)
如果您需要在调用时使用这些值,则需要一个辅助过程:
proc foo_ab args {
global a b
uplevel 1 [list foo $a $b {*}$args]
# Or this in older Tcl: uplevel 1 [list foo $a $b] $args
}
Run Code Online (Sandbox Code Playgroud)
在 8.5 中,这也可以用别名和apply:
interp alias {} foo_ab {} apply {args {
global a b
uplevel 1 [list foo $a $b {*}$args]
}}
Run Code Online (Sandbox Code Playgroud)
在 8.6 中,您可以使用tailcall以下命令进一步优化:
interp alias {} foo_ab {} apply {args {
global a b
tailcall foo $a $b {*}$args
}}
Run Code Online (Sandbox Code Playgroud)
您还可以使用其他一些更肮脏的技巧,例如:
interp alias {} foo_ab {} namespace inscope :: {foo $a $b}
Run Code Online (Sandbox Code Playgroud)
虽然这不是特别快,但它确实适用于所有 Tcl 8.* 版本。