Tcl: гарантированная последовательность вычисления логического выражения? - PullRequest
0 голосов
/ 11 октября 2018

Допустим, у меня есть условное выражение Tcl, представляющее собой логическую комбинацию шагов.

  1. Будет ли выражение всегда оцениваться слева направо (исключая скобки)?
  2. Есливыражение станет истинным, остановится ли остальная часть оценки?

У меня есть этот фрагмент кода, который анализирует файл и условно заменяет вещи в строках.

set fp [ open "file" ]
set data [ read $fp ]
close $fp
foreach line [ split $data \n ] {
    if { $enable_patch && [ regsub {<some_pattern>} $line {<some_other_pattern>} line ]} {
        puts $outfp $line
        <do_some_more_stuff>
    }
}

Итак, моя проблемавот что, если enable_patch не верно, я не хочу, чтобы строка была изменена.Теперь мой тест показывает, что код является детерминированным в Tcl 8.5 в Linux.Но мне интересно, не сломается ли это при других условиях / версиях / ОС.

1 Ответ

0 голосов
/ 11 октября 2018

Да, операторы || и && являются операторами "короткого замыкания" в TCL.Это означает, что вы можете рассчитывать на их оценку слева направо, и эта оценка остановится, как только будет известно значение выражения.

...