문제

나는 단순한'반복'에 AppleScript,고 싶으면 이동하는 다음 항목에"반복"조건에 따라.기본적으로 찾고 있어요 무언가를 위해하고"계속"(또는 휴식?) 다른 언어로도 제공됩니다.

나는 정통하지 않 AppleScript 그러나 나는 그것을 발견 유용한 몇 가지 있습니다.

도움이 되었습니까?

해결책

이 정확한 문제를 검색 한 후, 나는 이것을 발견했다 책 추출물 온라인. 그것은 현재 반복을 건너 뛰고 다음 반복으로 바로 점프하는 방법에 대한 질문에 정확하게 답변합니다. repeat 고리.

사과 스크립트가 있습니다 exit repeat, 이는 루프를 완전히 끝내고 남은 반복을 모두 건너 뜁니다. 이것은 무한 루프에서 유용 할 수 있지만이 경우 우리가 원하는 것은 아닙니다.

분명히 a continue-AppleScript에는 같은 기능이 존재하지 않지만 여기에 시뮬레이션하는 요령이 있습니다.

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

이것은 1, 2, 4 및 5에 대한 대화 상자를 표시합니다.

여기에서 두 개의 루프를 만들었습니다. 외부 루프는 실제 루프, 내부 루프는 한 번만 반복되는 루프입니다. 그만큼 exit repeat 외부 루프를 계속하면서 내부 루프를 종료합니다. 정확히 우리가 원하는 것!

분명히, 당신이 이것을 사용하면, 당신은 정상을 할 수있는 능력을 잃게됩니다. exit repeat.

다른 팁

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

이것은 여전히"exit"반복 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

위의 시도 블록 기반 접근법을 기반으로하지만 약간 더 잘 읽습니다. 물론, ContinuEREPEAT는 정의되지 않기 때문에 오류가 발생하여 나머지 시도 블록을 건너 뜁니다.

오류를 그대로 유지하려면 예상치 못한 오류가 발생하는 ON ERROR 조항이 포함되어 있습니다.

- 또는 다른 전략을 사용할 수 있습니다 : 루프를 사용하여 루프를 사용하고 다음과 같은 핸들러에서 조건부 로직을 수행하십시오.

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

당신은 모두 그것을 과도하게 복잡하게하고 있습니다. 이 시도:

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

조건부로만 반복하는 루프에는 "반복 기기"를 사용할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top