所以我有一块继承的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"
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑设计的最初想法是使用全局变量作为log参数的默认值.但是,它没有按预期工作,我无法找到如何正确编写,假设它甚至可能.
哪种语法是正确的?
谢谢你的帮助.
嗯,这是正确的:
proc v2 [list vimm [list log $LOG_DEBUG]] {
# ... body same as before
}
Run Code Online (Sandbox Code Playgroud)
但那只是丑陋的.更简洁的方法是:
proc v2 {vimm {log ""}} { # Any dummy value would do...
global LOG_DEBUG
if {[llength [info level 0]] < 3} {
set log $LOG_DEBUG
}
# ... as before
}
Run Code Online (Sandbox Code Playgroud)
但是Tcl真正的禅是根本不使用数字来完成这项任务,而是命名:
proc v2 {vimm {log "debug"}} {
if {$log eq "debug"} {
puts "log"
} else {
puts "no log"
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7520 次 |
最近记录: |