странное поведение продолжения цикла while - PullRequest
1 голос
/ 22 декабря 2010

Я довольно новичок в программировании на TCL и, пройдя через основы, я обнаружил следующий фрагмент кода:

set x 0;
while "$x < 3" {
    set x [expr $x + 1]
    if {$x >6} break;
    if "$x > 2" continue;
    puts "x is $x"; 
    }
puts "exited second loop with X equal to $x\n"

При выполнении результат будет следующим:

х равен 1
х 2
вышел второй цикл с Х, равным 7

Что меня удивляет, так это то, что при выполнении команды continue цикл проверки while (x <3), по-видимому, не оценивается. Однако в состоянии man-страниц tcl "<strong> Оператор continue внутри тела остановит выполнение кода и тест будет переоценен. "

Чего мне не хватает?

1 Ответ

9 голосов
/ 22 декабря 2010

Поскольку вы использовали кавычки в «$ x <3», вы оцениваете это условие только один раз: в первый раз, когда его видит интерпретатор tcl, постоянно выполняя тест «0 <3».Поскольку это всегда так, вы выходите из тела цикла while только тогда, когда вы [прерываете]. </p>

, если вы используете скобки {} вместо кавычек "" для условия while, этот тест оценивается только функцией whileсам цикл, а не этапом подстановки интерпретатора tcl, и работает так, как вы ожидаете.

Правило большого пальца: всегда используйте {} в тесте if / while / for и т.д.поведение - это то, что вы ищете).

...