通过规格/实现,访问命名空间变量与upvar之间的差异是否有预期。我必须使用呼叫函数。我不能仅仅通过一个论点。从经验上,Upvar获胜。但是在所有合理情况下,这是期望的吗?谢谢。
是的。完全范围的参考比upvar
参考快于variable
参考。
找出命令"时间"是您的朋友:
namespace eval toto {
proc cb_upvar {varname} {
upvar $varname var
incr var
}
proc cb_scoped {varname} {
incr $varname
}
proc cb_variable {varname} {
variable $varname
incr $varname
}
}
proc benchmark {cmd} {
set toto::totovar 1
time $cmd 100
puts -nonewline "[lindex $cmd 0] =>t"
puts [time $cmd 20000000]
}
puts [info tclversion]
benchmark {toto::cb_scoped ::toto::totovar}
benchmark {toto::cb_variable totovar}
benchmark {toto::cb_upvar totovar}
输出:
toto::cb_scoped => 0.47478505 microseconds per iteration
toto::cb_variable => 0.7644891 microseconds per iteration
toto::cb_upvar => 0.6046395 microseconds per iteration
rem:要获得一致的结果需要大量迭代。