質問

AppleScriptに単純な「繰り返し」があり、「繰り返し」の次の項目に移動したいと思います。条件付き。基本的に、「続行」に似たものを探しています。 (または壊れますか?)他の言語で。

AppleScriptに精通していませんが、今では何回か便利だと感じています。

役に立ちましたか?

解決

この正確な問題を検索した結果、書籍の抽出をオンラインで。現在の反復をスキップして、 repeat ループの次の反復に直接ジャンプする方法の質問に正確に答えます。

Applescriptには exit repeat があり、ループを完全に終了し、残りのすべての反復をスキップします。これは無限ループで役立ちますが、この場合は望みではありません。

どうやら 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のダイアログが表示されます。

ここでは、2つのループを作成しました。外側のループは実際のループで、内側のループは1回だけ繰り返すループです。 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

これにより、引き続き「終了の繰り返し」が表示されます。可能性

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

上記のtryブロックベースのアプローチに基づきますが、読み取りは若干良くなります。もちろん、continueRepeatが定義されていないため、エラーがスローされ、残りのtryブロックがスキップされます。

エラーのスローをそのまま維持するには、予期しないエラーをスローする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

Y'allはすべて複雑すぎます。これを試してください:

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

“繰り返し中”を使用することもできます条件付きでのみ繰り返すforループ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top