Frage

Ich habe eine einfache ‚wiederholen mit‘ in einem Apple und mag bedingt zum nächsten Punkt in der „Wiederholung“ bewegen. Grundsätzlich suche ich nach etwas ähnlichem wie „Weiter“ (oder brechen?) In anderen Sprachen.

Ich bin nicht gut in Apple versiert, aber ich habe es nützlich, ein paar Mal gefunden.

War es hilfreich?

Lösung

Nach genau diesem Problem suchen, fand ich diese Buch extrahiert online. Es genau beantwortet die Frage, wie die aktuelle Iteration überspringen und direkt in der nächsten Iteration einer repeat Schleife springen.

Applescript hat exit repeat, die vollständig eine Schleife endet, alle verbleibenden Iterationen zu überspringen. Dies kann in einer Endlos-Schleife nützlich sein, ist aber nicht das, was wir in diesem Fall wollen.

Offenbar eine continue ähnliche Funktion existiert nicht in Applescript, aber hier ist ein Trick, um es zu simulieren:

set aList to {"1", "2", "3", "4", "5"}

repeat with anItem in aList -- # actual loop
    repeat 1 times -- # fake loop
        set value to item 1 of anItem

        if value = "3" then exit repeat -- # simulated `continue`

        display dialog value
    end repeat
end repeat

Damit wird die Dialoge für 1, 2, 4 und 5 angezeigt werden.

Hier haben Sie zwei Schleifen erstellt: die äußere Schleife Ihre tatsächliche Schleife ist, ist die innere Schleife eine Schleife, die nur einmal wiederholt. Die exit repeat wird die innere Schleife verlassen, mit der äußeren Schleife fortgesetzt: genau das, was wir wollen,

Selbstverständlich, wenn Sie diese verwenden, verlieren Sie die Möglichkeit, eine normale exit repeat zu tun.

Andere Tipps

set aList to {"1", "2", "3", "4", "5"}

repeat with anItem in aList -- # actual loop
    try
        set value to item 1 of anItem

        if value = "3" then error 0 -- # simulated `continue`

        log value
    end try
end repeat

Dies wird Ihnen immer noch die "exit repeat" possibillity

set aList to {"1", "2", "3", "4", "5"}

repeat with anItem in aList -- # actual loop
    try -- # needed to simulate continue
        set value to item 1 of anItem
        if value = "3" then continueRepeat -- # simulated `continue` throws an error to exit the try block

        log value
    on error e
        if e does not contain "continueRepeat" then error e -- # Keeps error throwing intact
    end try
end repeat

Basierend auf dem try-Block basierten Ansatz oben, aber liest etwas besser. Natürlich, da continueRepeat kein Fehler geworfen definiert werden, um den Rest des try-Block verursacht übersprungen werden.

Damit Fehler intakt werfen schließen die auf Fehler Klausel, die unerwartete Fehler führt.

- Oder könnten Sie andere Strategie verwenden: die Schleife Schleife verwenden, und führen Sie die bedingte Logik in einem Handler, etwa so:

set aList to {"1", "2", "3", "4", "5"}

repeat with anItem in aList
   doConditionalWork(anItem as string)
end repeat

on doConditionalWork(value)

   if value = "3" then return

   display dialog value

end doConditionalWork

Y'all sind alle overcomplicating es. Versuchen Sie folgendes:

set aList to {"1", "2", "3", "4", "5"}

repeat with anItem in aList
    set value to item 1 of anItem
    if value is not "3" then log value
end repeat

Sie können auch „wiederholen, während“ verwenden für Schleifen, die nur bedingt wiederholen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top