ابليسكريبت يعادل "تواصل"؟
-
06-07-2019 - |
سؤال
ولدي بسيطة "تكرار مع 'في ابليسكريبت، وأود أن ننتقل إلى البند التالي في" تكرار "بشروط. أساسا أنا أبحث عن شيء يشبه "تواصل" (أو كسر؟) في لغات أخرى.
وأنا لا ضليعا في ابليسكريبت لكنني وجدت أنه من المفيد عدة مرات الآن.
المحلول
وبعد البحث عن هذه المشكلة بالضبط، لقد وجدت هذا <وأ 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
ويمكنك أيضا استخدام "تكرار في حين أن" لالحلقات التي تتكرر إلا بشروط.