إنشاء واستئناف الـ coroutine
جزء من قسم المنطق والتحكم في التدفق في رحلة Lua على Coddy. الدرس 49 من 54.
الآن بعد أن فهمت ماهية coroutines، لنتعلّم كيفية إنشائها وتشغيلها فعليًا في Lua.
لإنشاء coroutine، تستخدم الدالة coroutine.create(). تأخذ هذه الدالة دالةً عاديةً كوسيط لها وتغلّفها في كائن coroutine. إليك الصياغة الأساسية:
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)في هذه المرحلة، يكون coroutine موجودًا، لكنه لم يبدأ في العمل بعد. لم يتم استدعاء الدالة myTask. لبدء تنفيذ coroutine أو متابعته فعليًا، تستخدم coroutine.resume():
coroutine.resume(co)عندما تستدعي resume() على coroutine للمرة الأولى، يبدأ تنفيذها من بداية function الخاصة بها. إذا نفّذت coroutine كامل مسارها دون توقّف مؤقت، فإنها تكتمل ولا يمكن استئنافها مرة أخرى.
إليك مثالًا كاملًا:
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- يطبع كلا الرسالتينيعمل coroutine من البداية إلى النهاية دفعةً واحدة. في الدرس التالي، ستتعلّم كيفية جعل coroutine تتوقف مؤقتًا في منتصف التنفيذ.
التحدي
سهلاكتب function باسم runSimpleCoroutine تأخذ message وتُرجع المخرجات من coroutine التي تطبع تلك الرسالة.
أنشئ coroutine باستخدام coroutine.create() لتغليف function تطبع الرسالة المقدَّمة. ثم استخدم coroutine.resume() لتنفيذ coroutine. يجب أن تُرجع function الرسالة التي تمت طباعتها.
المنطق:
- عرّف function تطبع معامل message
- أنشئ coroutine من تلك function باستخدام
coroutine.create() - استأنف coroutine باستخدام
coroutine.resume() - أرجِع الرسالة التي تمت طباعتها
المعاملات:
message(string): الرسالة التي ستتم طباعتها بواسطة coroutine
القيم المُرجعة: الرسالة التي تمت طباعتها بواسطة coroutine (string)
جرّب بنفسك
function runSimpleCoroutine(message)
-- اكتب الكود هنا
end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتحكم في التدفق
1التكرار المتقدم عبر الجداول
التكرار باستخدام pairs()التكرار باستخدام ipairs()pairs() مقابل ipairs()مراجعة - ورقة الشخصية2المزيد من دوال مكتبة Table
table.concat()إنشاء الجداول و unpack()table.sort()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج3مفاهيم الدوال المتقدمة
إرجاع قيم متعددةالدوال متغيرة الوسائط (...)الدوال كقيم من الدرجة الأولىالدوال المجهولةما هو الـ Closure؟ملخص - معالج أحداث بسيط9Coroutines للمبتدئين
ما هو الـ Coroutine؟إنشاء واستئناف الـ coroutineالإيقاف المؤقت باستخدام coroutine.yield()resume و yieldالتحقق من حالة الـ Coroutineمراجعة - مولد الأرقاممراجعة - رياضيات المتجهاتتدرّب بنفسك: مترجم Lua عبر الإنترنت