我是 TCL 新手,正在尝试设置一个简单的递归循环。我的代码一直运行到递归完成为止,然后它开始抛出错误。这是我的代码:
set testNum 0
proc raiseTest { a } {
puts $a
if { $a == 5 } {
puts "Done!"
} elseif { $a != 5 } {
incr a
puts "Going!"
[raiseTest $a]
}
}
[ raiseTest $testNum ]
一旦 proc 达到 5 并完成最后一个循环,我就会遇到 invalid command name "" 错误,然后是大量 invoked from inside 错误,我不知道为什么。有人可以帮我吗?
有两件事
elseif {$a != 5}
是多余的,您可以将其替换为else
为了进一步讨论第 1 点,
puts "Going!"
之后的一行,内容为:
[raiseTest $a]
此行调用
raiseTest $a
,然后由于方括号,捕获该调用的输出(空字符串,因为没有返回任何内容)并将其用作过程的名称并调用它。
这是一个例子:
proc foo {} {
puts "foo"
return "bar"
}
proc bar {} {
puts "bar"
}
foo ;# prints "foo"
[foo] ;# prints "foo", then "bar""
话虽这么说,代码应该如下所示,删除方括号:
proc raiseTest { a } {
puts "a=$a"
if { $a == 5 } {
puts "Done!"
return
} else {
incr a
puts "Going!"
raiseTest $a
}
puts "Exiting, a=$a"
}
set testNum 0
raiseTest $testNum