假设我在主命名空间中有一个proc名称foo的Tcl。
然后我创建一个命名空间栏,在其中,我调用proc foo。现在,由于没有foo :: bar proc,因此将调用全局的proc。但是,我也可以通过调用:: foo显式调用全局foo。
两个选项中是否有任何性能优势?这不是经验问题,而是更多地理解proc查找表应该如何工作
答案 0 :(得分:2)
Tcl非常广泛地缓存这些类型的查找,因此在抽象中准确预测性能的变化是很尴尬的。相反,最好测试一下!这是在我的笔记本电脑上使用Tcl 8.6 ...
完成的% proc foo {} {expr 123}
% time { foo } 100000
0.36416123 microseconds per iteration
% namespace eval bar { time { foo } 100000 }
0.36913464 microseconds per iteration
% namespace eval bar { time { ::foo } 100000 }
0.36198978000000004 microseconds per iteration
简而言之,在这个特定的测试中,我们看到速度方面的呼叫之间的差异在于噪声;我不信任上述差异。
我建议编写清晰的代码,除非你测量问题,否则不要担心速度。