Applescript-Äquivalent von „weiter“?
-
06-07-2019 - |
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.
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.