有没有办法重命名 'set'
Is there any way to rename 'set'
在尝试重命名 set
函数时,
我收到错误 too many nested evaluations (infinite loop?)
(见下文)。
可能是因为 rename
在内部使用了 set
。有什么方法可以覆盖此行为吗?
rename set Set
too many nested evaluations (infinite loop?)
while executing
"set cmd [lindex $args 0]"
(procedure "::unknown" line 8)
invoked from within
"set cmd [lindex $args 0]"
(procedure "::unknown" line 8)
invoked from within
"set cmd [lindex $args 0]"
procedure "::unknown" line 8
...
rename
命令是Tcl的内置命令,不依赖于任何其他命令。然而,交互式评估循环在其历史管理代码中确实使用了相当多的 set
,unknown
命令也是如此,该命令处理当命令名称未解析为现有命令时要执行的操作。这会触发一个无限循环,因为当 set
不存在时处理要做什么需要 set
作为处理代码的一部分出现;堆栈保护代码(参见 interp recursionlimit
)最终会把事情搞砸……
最简单的解决方法是确保在名为 set
.
的地方保留 某物
# Make our replacement
proc replacement_set {varName {value ""}} {
# This is 8.6-specific code, but you can do other equivalent things
tailcall old_set {*}[lrange [info level 0] 1 end]
}
# Swap things in, with both renames on the same line...
rename set old_set; rename replacement_set set
请注意,您不需要在脚本中那么小心。
在尝试重命名 set
函数时,
我收到错误 too many nested evaluations (infinite loop?)
(见下文)。
可能是因为 rename
在内部使用了 set
。有什么方法可以覆盖此行为吗?
rename set Set
too many nested evaluations (infinite loop?)
while executing
"set cmd [lindex $args 0]"
(procedure "::unknown" line 8)
invoked from within
"set cmd [lindex $args 0]"
(procedure "::unknown" line 8)
invoked from within
"set cmd [lindex $args 0]"
procedure "::unknown" line 8
...
rename
命令是Tcl的内置命令,不依赖于任何其他命令。然而,交互式评估循环在其历史管理代码中确实使用了相当多的 set
,unknown
命令也是如此,该命令处理当命令名称未解析为现有命令时要执行的操作。这会触发一个无限循环,因为当 set
不存在时处理要做什么需要 set
作为处理代码的一部分出现;堆栈保护代码(参见 interp recursionlimit
)最终会把事情搞砸……
最简单的解决方法是确保在名为 set
.
# Make our replacement
proc replacement_set {varName {value ""}} {
# This is 8.6-specific code, but you can do other equivalent things
tailcall old_set {*}[lrange [info level 0] 1 end]
}
# Swap things in, with both renames on the same line...
rename set old_set; rename replacement_set set
请注意,您不需要在脚本中那么小心。