Pregunta

Tengo un simple 'repetir con' en un AppleScript, y me gustaría pasar al siguiente elemento en el " repetir " condicionalmente Básicamente estoy buscando algo similar a "continuar" (¿o descanso?) en otros idiomas.

No conozco bien AppleScript, pero lo he encontrado útil algunas veces.

¿Fue útil?

Solución

Después de buscar este problema exacto, encontré esto extracto de libro en línea. Responde exactamente la pregunta de cómo omitir la iteración actual y saltar directamente a la siguiente iteración de un bucle repeat .

Applescript tiene exit repeat , que finalizará por completo un bucle, omitiendo todas las iteraciones restantes. Esto puede ser útil en un bucle infinito, pero no es lo que queremos en este caso.

Aparentemente, una función similar a continue no existe en AppleScript, pero aquí hay un truco para 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

Esto mostrará los cuadros de diálogo para 1, 2, 4 y 5.

Aquí, ha creado dos bucles: el bucle externo es su bucle real, el bucle interno es un bucle que se repite solo una vez. El exit repeat saldrá del bucle interno, continuando con el bucle externo: ¡exactamente lo que queremos!

Obviamente, si usa esto, perderá la capacidad de hacer una salida repetir .

Otros consejos

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

Esto todavía le dará la " salir repetir " posibilidad

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

Basado en el enfoque basado en el bloque de prueba anterior, pero se lee un poco mejor. Por supuesto, dado que continueRepeat no está definido, se generará un error que hará que se omita el resto del bloque try.

Para mantener intacto el lanzamiento de errores, incluya la cláusula de error que arroja cualquier error inesperado.

- O podría usar una estrategia diferente: use el bucle a bucle y realice la lógica condicional en un controlador, de esta manera:

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

Todos ustedes lo están complicando demasiado. Prueba esto:

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

También puede usar & # 8220; repetir mientras & # 8221; para bucles que solo se repiten condicionalmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top