我有所有這些的Tcl/Tk 8.1版程序,已經成爲打破,因爲的Tcl/Tk 8.5.10不能正確處理字符串/數字轉換。
這裏,外殼爲TCL,和類型:
% expr {01}
1
(等..)
% expr {06}
6
% expr {07}
7
,然後我們得到8 ...
% expr {08}
missing operator at "[email protected]_"
看起來像無效的八進制數
但是我情況變得更糟。仍然在Tcl的外殼,試試這個:
在我Tcl8.1殼:
% format "%.0f" {08}
8
但在我的新的和改進TCL8.5殼,我得到一個錯誤:
% 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錯誤地處理了第八個數字。如果您的 希望您的格式聲明能夠保持健全的行爲,那麼將不會發生。 您的代碼將一直飛行,直至遇到值爲{08}的字符串,並且 Tcl 8.5.10解釋器將生成錯誤,因爲它將假設 {08}是一種特殊情況八進制數,不管所有使用的其他小號碼都能正常工作!
上述問題的一種可能的解決方案是降級回Tcl 8.1 shell。我已確認該版本至少能正確處理編號爲08的格式 。 Tcl 8.5.10 shell根本就沒有。
多行,是的,但「掃描」建議是我見過的最簡潔最容易理解的。 「set b [scan b%d]」符合我的需求。 forceInteger proc的其餘部分專門用於防禦性輸入驗證。 – 2010-01-21 18:49:12