سؤال

ولدي بسيطة "تكرار مع 'في ابليسكريبت، وأود أن ننتقل إلى البند التالي في" تكرار "بشروط. أساسا أنا أبحث عن شيء يشبه "تواصل" (أو كسر؟) في لغات أخرى.

وأنا لا ضليعا في ابليسكريبت لكنني وجدت أنه من المفيد عدة مرات الآن.

هل كانت مفيدة؟

المحلول

وبعد البحث عن هذه المشكلة بالضبط، لقد وجدت هذا <وأ href = "http://books.google.com/books؟id=BYy0OKcwUxsC&pg=PA284&lpg=PA284&dq=applescript+continue+next+iteration+repeat" يختلط = "noreferrer"> كتاب استخراج على الانترنت. فهو يجيب بالضبط مسألة كيفية تخطي التكرار الحالي والقفز مباشرة إلى التكرار التالي من حلقة repeat.

لقد exit repeat ابليسكريبت، التي ستنتهي تماما حلقة، وتخطي كل التكرارات المتبقية. هذا يمكن أن يكون مفيدا في حلقة لا نهائية، ولكن ليس هذا ما نريده في هذه القضية.

وعلى ما يبدو ميزة مثل continue غير موجود في ابليسكريبت، ولكن هنا هو خدعة لمحاكاة ما يلي:

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

وهذا سوف لا تزال تعطي لك "الخروج تكرار" 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 سيتم طرح خطأ الذي يسبب بقية كتلة حاول أن تخطي.

لإبقاء الخطأ رمي سليمة تشمل على خطأ شرط أن يلقي أي خطأ غير متوقع.

- أو هل يمكن استخدام استراتيجية مختلفة: استخدام حلقة إلى حلقة، والقيام المنطق الشرطي في معالج، كما يلي:

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

ي 'الل كلها overcomplicating ذلك. جرب هذا:

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