所以我有一块继承的Tcl代码。基本上它执行以下操作:
set LOG_ALL 0
set LOG_DEBUG 1
set LOG_INFO 2
set LOG_WARN 3
set LOG_ERROR 4
set LOG_FATAL 5
set LOG_SILENT 6
proc v2 {vimm {log LOG_DEBUG}} {
global LOG_DEBUG
if {$log == $LOG_DEBUG} {
puts "log"
} else {
puts "no log"
}
}
我怀疑设计的最初想法是使用全局变量作为 log 参数的默认值。但是,它没有按预期工作,我无法找到如何正确编写,假设它甚至可能。
哪种语法正确?
感谢您的帮助。
答案 0 :(得分:5)
嗯,这是正确的:
proc v2 [list vimm [list log $LOG_DEBUG]] {
# ... body same as before
}
但那只是丑陋的。更简洁的方式是:
proc v2 {vimm {log ""}} { # Any dummy value would do...
global LOG_DEBUG
if {[llength [info level 0]] < 3} {
set log $LOG_DEBUG
}
# ... as before
}
但是Tcl真正的禅是根本不使用数字来代替这个任务,而是命名:
proc v2 {vimm {log "debug"}} {
if {$log eq "debug"} {
puts "log"
} else {
puts "no log"
}
}