Udostępnij za pośrednictwem


about_Continue

Krótki opis

Opisuje sposób continue natychmiastowego zwracania przepływu programu do góry pętli programu, switch instrukcji lub trap instrukcji.

Długi opis

Instrukcja continue zapewnia sposób zamykania bieżącego bloku sterowania, ale kontynuowania wykonywania, a nie całkowitego zakończenia. Instrukcja obsługuje etykiety. Etykieta to nazwa przypisana do instrukcji w skry skrycie.

Używanie kontynuacji w pętlach

Instrukcja bez etykiet continue natychmiast zwraca przepływ programu na górę pętli najwspanedniejszych, które jest kontrolowane przez instrukcję for, foreach, dolub while . Bieżąca iteracja pętli jest przerywana, a pętla kontynuuje kolejną iterację.

W poniższym przykładzie przepływ programu powraca do góry while pętli, jeśli zmienna $ctr jest równa 5. W związku z tym wszystkie liczby z zakresu od 1 do 10 są wyświetlane z wyjątkiem 5:

while ($ctr -lt 10)
{
    $ctr += 1
    if ($ctr -eq 5)
    {
        continue
    }

    Write-Host -Object $ctr
}

W przypadku korzystania z for pętli wykonywanie jest kontynuowane w instrukcji <Repeat> , a następnie <Condition> test. W poniższym przykładzie pętla nieskończona nie zostanie wykonana, ponieważ dekrementacja $i występuje po słowie continue kluczowym.

#   <Init>  <Condition> <Repeat>
for ($i = 0; $i -lt 10; $i++)
{
    Write-Host -Object $i
    if ($i -eq 5)
    {
        continue
        # Will not result in an infinite loop.
        $i--
    }
}

Używanie etykiety kontynuuj w pętli

Instrukcja oznaczona continue etykietą kończy wykonywanie iteracji i przenosi kontrolkę do docelowej otaczającej iteracji lub switch etykiety instrukcji.

W poniższym przykładzie najbardziej wewnętrzna for wartość jest przerywana, gdy $condition parametr ma wartość True , a iteracja będzie kontynuowana z drugą for pętlą o wartości labelB.

:labelA for ($i = 1; $i -le 10; $i++) {
    :labelB for ($j = 1; $j -le 10; $j++) {
        :labelC for ($k = 1; $k -le 10; $k++) {
            if ($condition) {
                continue labelB
            } else {
                $condition = Update-Condition
            }
        }
    }
}

Używanie instrukcji continue w instrukcji switch

Nieoznaczonej continue instrukcji w ramach switch zakończenia wykonywania bieżącej switch iteracji i transferuje kontrolkę do góry switch obiektu w celu pobrania następnego elementu wejściowego.

Gdy istnieje jeden element continue wejściowy, kończy całą switch instrukcję. switch Gdy dane wejściowe są kolekcją, testuje switch każdy element kolekcji. Element continue kończy bieżącą iterację i switch kontynuuje działanie z następnym elementem.

switch (1,2,3) {
  2 { continue }  # moves on to the next element, 3
  default { $_ }
}
1
3

Używanie instrukcji continue w pułapce

Jeśli ostateczna instrukcja wykonywana w treści trap instrukcji to continue, błąd uwięziony jest dyskretnie ignorowany, a wykonanie będzie kontynuowane z instrukcją bezpośrednio po instrukcji, która spowodowała trap wystąpienie.

Nie należy używać kontynuacji poza pętlą, przełącznikiem lub pułapką

Gdy continue jest używany poza konstrukcją, która bezpośrednio ją obsługuje (pętle, switch, trap), program PowerShell wyszukuje stos wywołań dla konstrukcji otaczającej. Jeśli nie można odnaleźć otaczającej konstrukcji, bieżąca przestrzeń uruchomieniowa jest po cichu przerywana.

Oznacza to, że funkcje i skrypty, które przypadkowo używają continue zewnętrznej konstrukcji otaczającej, która ją obsługuje, mogą przypadkowo przerwać ich rozmówców.

Użycie continue wewnątrz potoku, takiego jak ForEach-Object blok skryptu, nie tylko kończy potok, ale potencjalnie kończy całą przestrzeń uruchamiania.

Zobacz też