Я поймал очень странную ошибку (?), Которая заняла у меня почти целый день, чтобы найти ее в реальном приложении.В коде был блок elseif
, который был закомментирован, и это привело к выполнению кода, который (как я думал) никогда не мог быть выполнен.
Я упростил тестовый сценарий, который воспроизводит это странное поведение 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 parser не любит несбалансированные фигурные скобки в комментариях.Но этот случай мне не понятен.
Может быть, я пропустил что-то важное?Как правильно закомментировать такие elseif
блоки, чтобы не было этих странных побочных эффектов?