الفرق بين المراجعتين ل"Ruby/Thread/index operator"

من موسوعة حسوب
< Ruby‏ | Thread
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<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|ليف]] <code>[[Ruby/Fiber|Fiber]]</code>) ، باستخدام إما رمز أو اسم [[Ruby/String|سلسلة نصية]]. إن لم يكن المتغير المعطى (انظر فقرة البنية العامة) غير موجود، فستعاد <code>nil</code>.
+
مرجع الخاصيات (Attribute Reference) - يُعيد قيمة متغير محلي-[[Ruby/Fiber|الليف]] fiber-local variable ([[Ruby/Fiber|الليف]] الأصلي لل[[Ruby/Thread|مهمة الفرعية]] الحالية إن لم يكن المتغير موجودًا داخل [[Ruby/Fiber|ليف]]) ، باستخدام إما رمز أو [[Ruby/String|سلسلة نصية]]. إن لم يكن المتغير المعطى (انظر فقرة البنية العامة) موجودًا، فستعاد <code>nil</code>.<syntaxhighlight lang="ruby">[
 
 
 
 
 
 
هذا سوف ينتج:
 
 
 
 
 
 
 
المعاملات <code>[[Ruby/Thread/5B-5D|#[]]]</code> و <code>[[Ruby/Thread/5B-5D-3D|#[]=]]</code> ليسا محليا [[Ruby/Thread|المهمة الفرعية]]، ولكنها محليا [[Ruby/Fiber|الليف]]. هذا الارتباك لم يظهر إلا بعد روبي 1.9 حيث ظهرت [[Ruby/Fiber|الليف]]. اختارت روبي 1.9 أن تكون التوابع محلية [[Ruby/Fiber|الليف]] لتوفير الاصطلاح التالي للنطاق الديناميكي (dynamic scope).
 
 
 
 
 
 
 
قد لا يعمل هذا الاصطلاح كنطاق ديناميكي إن كانت التوابع محلية [[Ruby/Thread|المهمة الفرعية]]، وقامت كتلة معطاة بتحويل (switches) [[Ruby/Fiber|الليف]].
 
 
 
 
 
 
 
للمتغيرات محلية [[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>
 
==القيمة المُعادة==
 
==أمثلة==
 
مثال على استخدام التابع <code>[]‎</code>:
 
<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/stop|stop]]</code>: يوقف التابع <code>stop</code> تنفيذ [[Ruby/Thread|المهمة الفرعية]] الحالية، ويضعها في حالة "نوم" (sleep)، ويُجدوٍل (schedules) تنفيذ [[Ruby/Thread|مهمة فرعية]] أخرى.
+
* التابع ‎<code>[[Ruby/Thread/index_operator-3D|[]=‎‎]]</code>: معامل تعيين الخاصيات (Attribute Assignment)  
* التابع <code>[[Ruby/Thread/index_operator-3D|[]=]]</code>: معامل تعيين الخاصيات (Attribute Assignment) - يعيّن أو ينشئ قيمة متغير محلي [[Ruby/Fiber|الليف]]، باستخدام إما رمز أو [[Ruby/String|سلسلة نصية]].
 
 
==مصادر==
 
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Thread.html#method-i-5B-5D قسم  التابع []في الصنف Thread‎ في توثيق روبي الرسمي.]
+
*[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)

مصادر