Что означает для (;;) в Perl? - PullRequest
15 голосов
/ 29 апреля 2010

Я искал код разработчика, когда увидел это

for (;;){
   ....
   ....
   ....
}

Я никогда не видел ";;" используется в цикле. Что это делает точно?

Ответы [ 6 ]

27 голосов
/ 29 апреля 2010

Это циклы навсегда. ';;' равняется отсутствию начального значения, условию остановки и условию приращения.

Это эквивалентно

while (true)
{
   ...
}

Обычно в теле цикла обычно присутствует условный оператор break;, если это не что-то вроде системного цикла ожидания или насоса сообщений.

10 голосов
/ 29 апреля 2010

Все 3 части являются необязательными. Инициализация и обновление пустого цикла - это noop. Пустое завершающее условие является неявным true. По сути, это то же самое, что и

while (true) {
   //...
}

Обратите внимание, что вам не обязательно быть «все или ничего»; Вы можете иметь часть, а не другие.

for (init; cond; ) {
  //...
}

for (; cond; update) {
  //...
}

for (init; ; update) {
  //...
}
4 голосов
/ 29 апреля 2010

Как и в C, цикл for состоит из трех разделов:

  • секция предварительного цикла, которая выполняется перед началом цикла.
  • продолжение секции условий, которая, хотя и имеет значение true, продолжит цикл.
  • секция после итерации, которая выполняется после каждой итерации тела цикла.

Например:

for (i = 1, acc = 0; i <= 10; i++)
    acc += i;

сложит числа от 1 до 10 включительно (в C и, при условии, что вы используете синтаксис Perl, такой как $i и фигурные скобки, также в Perl).

Однако ничто не требует, чтобы разделы действительно содержали что-либо, и, если условие отсутствует, оно считается истинным.

Таким образом, цикл for(;;) в основном просто означает: не выполнять настройку цикла, выполнять цикл вечно (несмотря на разрывы) и не выполнять обработку, зависящую от итерации. Другими словами, это бесконечный цикл.

4 голосов
/ 29 апреля 2010

Бесконечный цикл. Большую часть времени он будет использоваться в потоке для выполнения некоторой работы.

    boolean exit = false;

    for(;;) {
        if(exit) {
            break;
        }
        // do some work
    }
2 голосов
/ 29 апреля 2010

Это так же, как

while(true) {
   ...
}

Он зацикливается навсегда.

Вам не нужно указывать все части цикла for. Например, следующий цикл (который не содержит тела или токена обновления) будет выполнять линейный поиск myArray

for($index = -1; $myArray[++$index] != $target;);
2 голосов
/ 29 апреля 2010

Бесконечный цикл (пока вы не вырвитесь из него).

Часто используется вместо:

while(true) { // Do something }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...