我發現了非常奇怪的錯誤(?),它讓我幾乎整天都在實際應用中找到它。在代碼中有一個elseif
塊被註釋掉,並導致執行代碼(我認爲)無法執行。if/else塊內的tcl註釋的奇怪行爲。這是tcl解釋器的錯誤嗎?
我簡化了測試用例,它重現了這種奇怪的tcl行爲。
proc funnyProc {value} {
if {$value} {
return "TRUE"
# } elseif {[puts "COMMENT :)"] == ""} {
# return "COMMENT"
} else {
return "FALSE"
}
return "IT'S IMPOSSIBLE!!!"
}
puts [funnyProc false]
你認爲這個程序會輸出什麼?
- 註釋行中的
puts
被執行。從任何編程語言POV都不可能。 - 塊
if {...} {return} else {return}
之後的行也被執行。從邏輯true/false
是不可能的。
我知道tcl-comment的行爲類似於名稱爲#
的命令,並且使用所有參數直到EOL。而tcl解析器不喜歡評論中的不平衡大括號。但是這個情況超出了我的理解。
也許我錯過了一些重要的東西?如何正確評論這樣的elseif
塊,所以不要有這些奇怪的副作用?
這太瘋狂了!我注意到,如果在「elseif」行末尾加上「{」,那麼代碼將按照預期行事。 – 2011-04-29 15:32:18