Domanda

Ho una semplice "ripetizione con" in un AppleScript e vorrei passare all'elemento successivo nella sezione "ripeti". condizionalmente. Fondamentalmente sto cercando qualcosa di simile a " continua " (o pausa?) in altre lingue.

Non sono esperto di AppleScript ma l'ho trovato utile alcune volte.

È stato utile?

Soluzione

Dopo aver cercato questo esatto problema, ho trovato questo estratto del libro online. Risponde esattamente alla domanda su come saltare l'attuale iterazione e passare direttamente alla successiva iterazione di un ciclo repeat .

Applescript ha exit repeat , che terminerà completamente un ciclo, saltando tutte le iterazioni rimanenti. Questo può essere utile in un ciclo infinito, ma non è quello che vogliamo in questo caso.

Apparentemente una funzione simile a continue non esiste in AppleScript, ma ecco un trucco per simularla:

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

Verranno visualizzate le finestre di dialogo per 1, 2, 4 e 5.

Qui hai creato due loop: il loop esterno è il tuo loop reale, il loop interno è un loop che si ripete solo una volta. Il exit repeat uscirà dal loop interno, continuando con il loop esterno: esattamente quello che vogliamo!

Ovviamente, se lo usi, perderai la possibilità di fare un normale exit repeat .

Altri suggerimenti

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

Questo ti consentirà comunque di " 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

Basato sull'approccio basato su blocco di prova sopra ma legge leggermente meglio. Naturalmente, poiché continueRepeat non è definito, verrà generato un errore che farà saltare il resto del blocco try.

Per mantenere intatto il lancio dell'errore, includere la clausola on error che genera qualsiasi errore imprevisto.

- Oppure potresti usare una strategia diversa: usa il ciclo per eseguire il ciclo e fai la logica condizionale in un gestore, in questo modo:

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

Lo state tutti complicando troppo. Prova questo:

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

Puoi anche usare & # 8220; ripeti mentre & # 8221; per i loop che si ripetono solo in modo condizionale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top