التابع []
الخاص بالصنف Thread
في روبي
مرجع الخاصيات (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)