الفرق بين المراجعتين لصفحة: «Ruby/Fiber/transfer»
أنشأ الصفحة ب'{{DISPLAYTITLE:التابع <code>Fiber.transfer</code> في روبي}} ينقل التّابع <code>transfer</code> التحكّم إلى ليف (fiber) آخر، أو...' |
طلا ملخص تعديل |
||
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة) | |||
سطر 2: | سطر 2: | ||
ينقل التّابع <code>transfer</code> التحكّم إلى ليف (fiber) آخر، أو يستأنف عمل الليف الحالي عند آخر نقطة أوقف فيها، أو يبدأه إذا لم يُستأنَف سابقًا. سيُعلَّق الليف المُستدعَى كما في استدعاء <code>[[Ruby/Fiber/yield|Fiber.yield]]</code>. يجب عليك طلب 'fiber' قبل استخدام هذا التّابع. | ينقل التّابع <code>transfer</code> التحكّم إلى ليف (fiber) آخر، أو يستأنف عمل الليف الحالي عند آخر نقطة أوقف فيها، أو يبدأه إذا لم يُستأنَف سابقًا. سيُعلَّق الليف المُستدعَى كما في استدعاء <code>[[Ruby/Fiber/yield|Fiber.yield]]</code>. يجب عليك طلب 'fiber' قبل استخدام هذا التّابع. | ||
يعامل الليف طلب التحويل ( عبر transfer) الذي يستقبله على أنَّه نداء استئنافٍ. الوسائط المُمرَّرة من أجل التحويل تعامل كتلك المُمرَّرة من أجل الاستئناف. | يعامل الليف طلب التحويل ( عبر <code>transfer</code>) الذي يستقبله على أنَّه نداء استئنافٍ. الوسائط المُمرَّرة من أجل التحويل تعامل كتلك المُمرَّرة من أجل الاستئناف. | ||
لا يمكنك استئناف ليفٍ حُوِّل تحكمه إلى ليفٍ آخر. سيسبّب هذا خطأ استئنافٍ مضاعفٍ. عليك إعادة تحويل التحكّم إلى الليف الأول حتى تتمكن من توليده واستئنافه مجدَّدًا. | لا يمكنك استئناف ليفٍ حُوِّل تحكمه إلى ليفٍ آخر. سيسبّب هذا خطأ استئنافٍ مضاعفٍ. عليك إعادة تحويل التحكّم إلى الليف الأول حتى تتمكن من توليده واستئنافه مجدَّدًا. | ||
سطر 20: | سطر 20: | ||
== القيم المعادة == | == القيم المعادة == | ||
يعاد كائنُ. | |||
== الأمثلة == | == الأمثلة == | ||
مثالٌ عن استخدام التّابع <code>transfer</code>:<syntaxhighlight lang="ruby"> | مثالٌ عن استخدام التّابع <code>transfer</code>:<syntaxhighlight lang="ruby"> | ||
fiber1 = Fiber.new do | fiber1 = Fiber.new do | ||
puts "In Fiber 1" | |||
Fiber.yield | |||
end | end | ||
fiber2 = Fiber.new do | fiber2 = Fiber.new do | ||
puts "In Fiber 2" | |||
fiber1.transfer | |||
puts "Never see this message" | |||
end | end | ||
fiber3 = Fiber.new do | fiber3 = Fiber.new do | ||
puts "In Fiber 3" | |||
end | end | ||
fiber2.resume | fiber2.resume | ||
fiber3.resume | fiber3.resume | ||
</syntaxhighlight>سيعطي هذا المثال عند تنفيذه الناتج:<syntaxhighlight lang="ruby"> | </syntaxhighlight>سيعطي هذا المثال عند تنفيذه الناتج:<syntaxhighlight lang="ruby"> | ||
In fiber 2 | In fiber 2 | ||
In fiber 1 | In fiber 1 | ||
In fiber 3 | In fiber 3 | ||
سطر 63: | سطر 51: | ||
== انظر أيضا == | == انظر أيضا == | ||
* التابع <code>yield</code>: يتحكم مجدَّدًا بالسياق (contex) الذي استئنَفَ عمل الليف (fiber) مُمرِّرًا أيَّ وسائط قد مُرِّرت إليه. | * التابع <code>[[Ruby/Fiber/yield|yield]]</code>: يتحكم مجدَّدًا بالسياق (contex) الذي استئنَفَ عمل الليف (fiber) مُمرِّرًا أيَّ وسائط قد مُرِّرت إليه. | ||
* التابع <code>resume</code>: يستأنف الليف (fiber) من النقطة التي استدعُي فيها التّابع <code>[[Ruby/Fiber/yield|Fiber.yield]]</code> آخر مرّة. | * التابع <code>[[Ruby/Fiber/resume|resume]]</code>: يستأنف الليف (fiber) من النقطة التي استدعُي فيها التّابع <code>[[Ruby/Fiber/yield|Fiber.yield]]</code> آخر مرّة. | ||
== مصادر == | == مصادر == |
المراجعة الحالية بتاريخ 19:12، 18 أكتوبر 2018
ينقل التّابع 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
آخر مرّة.