我的所有这些 Tcl/Tk 8.1 版程序都已损坏,因为 Tcl/Tk 8.5.10 没有正确处理字符串/数字转换。
在这里,shell 进入 Tcl,然后输入:
% expr {01}
1
(等等..)
% expr {06}
6
% expr {07}
7
然后我们到8点...
% expr {08}
missing operator at "_@_"
看起来像无效的八进制数
但它变得更糟。仍然在 Tcl shell 中,试试这个:
在我的 Tcl8.1 外壳中:
% format "%.0f" {08}
8
但是在我的新的和改进的 Tcl8.5 shell 中,我得到了一个错误:
% format "%.0f" {08}
expected floating-point number but got "08" (looks like invalid octal number)
这简直太牛了!我的所有这些代码在 Tcl7.6 和 Tcl8.1 中都可以正常工作,但在 Tcl8.5 中开始给出奇怪的随机结果。只有当数字 08 恰好生成或被使用时!我花了几个小时试图找出问题所在。但事实证明,这只是我正在使用的一堆讨厌的代码!
所以,我发布这个咆哮作为警告。
Tcl/Tk 版本 8.5.10 错误地处理了数字 8。如果您期望格式语句的行为正常,则不会发生这种情况。您的代码将一直运行,直到遇到一个值为 {08} 的字符串,并且 Tcl 8.5.10 解释器将生成一个错误,因为它将假定 {08} 是一个特殊情况的八进制数,而不管事实是您使用的所有其他小数字都可以正常工作!
上述问题的一种可能解决方案是降级回 Tcl 8.1 shell。我已经确认该版本至少可以正确处理数字 08 的格式语句。Tcl 8.5.10 shell 根本没有。