التابع Fiber.transfer في روبي

من موسوعة حسوب
< Ruby‏ | Fiber
مراجعة 11:51، 12 أكتوبر 2018 بواسطة محمد-خطيب (نقاش | مساهمات) (أنشأ الصفحة ب'{{DISPLAYTITLE:التابع <code>Fiber.transfer</code> في روبي}} ينقل التّابع <code>transfer</code> التحكّم إلى ليف (fiber) آخر، أو...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

ينقل التّابع transfer التحكّم إلى ليف (fiber) آخر، أو يستأنف عمل الليف الحالي عند آخر نقطة أوقف فيها، أو يبدأه إذا لم يُستأنَف سابقًا. سيُعلَّق الليف المُستدعَى كما في استدعاء Fiber.yield. يجب عليك طلب 'fiber' قبل استخدام هذا التّابع.

يعامل الليف طلب التحويل ( عبر transfer) الذي يستقبله على أنَّه نداء استئنافٍ. الوسائط المُمرَّرة من أجل التحويل تعامل كتلك المُمرَّرة من أجل الاستئناف.

لا يمكنك استئناف ليفٍ حُوِّل تحكمه إلى ليفٍ آخر. سيسبّب هذا خطأ استئنافٍ مضاعفٍ. عليك إعادة تحويل التحكّم إلى الليف الأول حتى تتمكن من توليده واستئنافه مجدَّدًا.

البنية العامة

transfer(args, ...)  obj

المعاملات

args

الوسائط المراد تمريرها.

الوسائط الأخرى الإضافية المراد تمريرها أيضًا.

القيم المعادة

الأمثلة

مثالٌ عن استخدام التّابع transfer:

fiber1 = Fiber.new do

 puts "In Fiber 1"

 Fiber.yield

end

fiber2 = Fiber.new do

 puts "In Fiber 2"

 fiber1.transfer

 puts "Never see this message"

end

fiber3 = Fiber.new do

 puts "In Fiber 3"

end

fiber2.resume

fiber3.resume

سيعطي هذا المثال عند تنفيذه الناتج:

In fiber 2

In fiber 1

In fiber 3

انظر أيضا

  • التابع yield: يتحكم مجدَّدًا بالسياق (contex) الذي استئنَفَ عمل الليف (fiber) مُمرِّرًا أيَّ وسائط قد مُرِّرت إليه.
  • التابع resume: يستأنف الليف (fiber) من النقطة التي استدعُي فيها التّابع Fiber.yield آخر مرّة.

مصادر