الفرق بين المراجعتين لصفحة: «Ruby/Thread/index operator»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>[]</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف:...' |
لا ملخص تعديل |
||
سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby Thread]] | [[تصنيف: Ruby Thread]] | ||
مرجع | مرجع الخاصيات (Attribute Reference) - يُعيد قيمة متغير محلي-[[Ruby/Fiber|الليف]] fiber-local variable ([[Ruby/Fiber|الليف]] الأصلي لل[[Ruby/Thread|مهمة الفرعية]] الحالية إن لم يكن المتغير موجودًا داخل [[Ruby/Fiber|ليف]]) ، باستخدام إما رمز أو [[Ruby/String|سلسلة نصية]]. إن لم يكن المتغير المعطى (انظر فقرة البنية العامة) موجودًا، فستعاد <code>nil</code>.<syntaxhighlight lang="ruby">[ | ||
<syntaxhighlight lang="ruby">[ | |||
Thread.new { Thread.current["name"] = "A" }, | Thread.new { Thread.current["name"] = "A" }, | ||
Thread.new { Thread.current[:name] = "B" }, | Thread.new { Thread.current[:name] = "B" }, | ||
سطر 32: | سطر 10: | ||
th.join | th.join | ||
puts "#{th.inspect}: #{th[:name]}" | puts "#{th.inspect}: #{th[:name]}" | ||
end</syntaxhighlight> | end</syntaxhighlight>هذا سوف ينتج:<syntaxhighlight lang="ruby">#<Thread:0x00000002a54220 dead>: A | ||
#<Thread:0x00000002a541a8 dead>: B | |||
#<Thread:0x00000002a54130 dead>: C</syntaxhighlight>المعاملان <code>[]</code> و <code>[[Ruby/Thread/index operator-3D|[]=]]</code> ليسا محليا [[Ruby/Thread|المهمة الفرعية]] (thread-local)، ولكنهما محليا [[Ruby/Fiber|الليف]] (fiber-local). هذا الارتباك لم يظهر إلا بعد روبي 1.9، حيث ظهرت [[Ruby/Fiber|الألياف]] لأول مرة. اختارت روبي 1.9 أن تكون التوابع محلية-[[Ruby/Fiber|الليف]] لتوفير الاصطلاح التالي لأجل النطاق الديناميكي (dynamic scope).<syntaxhighlight lang="ruby">def meth(newvalue) | |||
begin | |||
oldvalue = Thread.current[:name] | |||
Thread.current[:name] = newvalue | |||
yield | |||
ensure | |||
Thread.current[:name] = oldvalue | |||
end | |||
end</syntaxhighlight>قد لا يعمل هذا الاصطلاح كنطاق ديناميكي إن كانت التوابع محلية-[[Ruby/Thread|المهمة الفرعية]] ( thread-local)، وقامت كتلة معطاة بتبديل (switches) [[Ruby/Fiber|الليف]].<syntaxhighlight lang="ruby">f = Fiber.new { | |||
meth(1) { | |||
Fiber.yield | |||
} | |||
} | |||
meth(2) { | |||
f.resume | |||
} | |||
f.resume | |||
p Thread.current[:name] | |||
#=> nil if fiber-local | |||
#=> 2 if thread-local (The value 2 is leaked to outside of meth method.)</syntaxhighlight>للمتغيرات محلية-[[Ruby/Thread|المهمة الفرعية]]، يرجى الاطلاع على التابعين <code>[[Ruby/Thread/thread_variable_get|thread_variable_get]]</code> و <code>[[Ruby/Thread/thread_variable_set|thread_variable_set]]</code>. | |||
==البنية العامة== | |||
<syntaxhighlight lang="ruby">thr[sym]→ obj or nil</syntaxhighlight> | |||
==القيمة المُعادة== | |||
تعاد قيمة متغير محلي-[[Ruby/Fiber|الليف]] fiber-local variable. وإن لم يكن المتغير موجودًا، فستعاد <code>nil</code>. | |||
==انظر أيضا== | ==انظر أيضا== | ||
* | * التابع <code>[[Ruby/Thread/index_operator-3D|[]=]]</code>: معامل تعيين الخاصيات (Attribute Assignment) | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-5B-5D قسم التابع [] | *[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-5B-5D <nowiki>قسم التابع [] في الصنف Thread في توثيق روبي الرسمي.</nowiki>] |
مراجعة 23:51، 5 نوفمبر 2018
مرجع الخاصيات (Attribute Reference) - يُعيد قيمة متغير محلي-الليف fiber-local variable (الليف الأصلي للمهمة الفرعية الحالية إن لم يكن المتغير موجودًا داخل ليف) ، باستخدام إما رمز أو سلسلة نصية. إن لم يكن المتغير المعطى (انظر فقرة البنية العامة) موجودًا، فستعاد nil
.
[
Thread.new { Thread.current["name"] = "A" },
Thread.new { Thread.current[:name] = "B" },
Thread.new { Thread.current["name"] = "C" }
].each do |th|
th.join
puts "#{th.inspect}: #{th[:name]}"
end
هذا سوف ينتج:
#<Thread:0x00000002a54220 dead>: A
#<Thread:0x00000002a541a8 dead>: B
#<Thread:0x00000002a54130 dead>: C
المعاملان []
و []=
ليسا محليا المهمة الفرعية (thread-local)، ولكنهما محليا الليف (fiber-local). هذا الارتباك لم يظهر إلا بعد روبي 1.9، حيث ظهرت الألياف لأول مرة. اختارت روبي 1.9 أن تكون التوابع محلية-الليف لتوفير الاصطلاح التالي لأجل النطاق الديناميكي (dynamic scope).
def meth(newvalue)
begin
oldvalue = Thread.current[:name]
Thread.current[:name] = newvalue
yield
ensure
Thread.current[:name] = oldvalue
end
end
قد لا يعمل هذا الاصطلاح كنطاق ديناميكي إن كانت التوابع محلية-المهمة الفرعية ( thread-local)، وقامت كتلة معطاة بتبديل (switches) الليف.
f = Fiber.new {
meth(1) {
Fiber.yield
}
}
meth(2) {
f.resume
}
f.resume
p Thread.current[:name]
#=> nil if fiber-local
#=> 2 if thread-local (The value 2 is leaked to outside of meth method.)
للمتغيرات محلية-المهمة الفرعية، يرجى الاطلاع على التابعين thread_variable_get
و thread_variable_set
.
البنية العامة
thr[sym]→ obj or nil
القيمة المُعادة
تعاد قيمة متغير محلي-الليف fiber-local variable. وإن لم يكن المتغير موجودًا، فستعاد nil
.
انظر أيضا
- التابع
[]=
: معامل تعيين الخاصيات (Attribute Assignment)