الفرق بين المراجعتين ل"Ruby/MatchData"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'تحوّل المكتبة <code>Marshal</code> مجموعات من كائنات روبب إلى سلاسل بتات (byte stream)، مما يسمح بتخزينها خا...')
 
(مراجعة وتدقيق)
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 1: سطر 1:
تحوّل المكتبة <code>Marshal</code> مجموعات من كائنات روبب إلى سلاسل بتات (byte stream)، مما يسمح بتخزينها خارج البرنامج النصي النشط حاليًا. ثم يمكن بعد ذلك قراءة تلك البيانات وإعادة إنشاء الكائنات الأصلية. 
+
الصنف <code>MatchData</code> هو نوع المتغير الخاص ‎<code>$~‎</code> ، كما أنه نوع الكائنات المُعادة من <code>[[Ruby/Regexp/match|Regexp.match]]</code> و <code>[[Ruby/Regexp/last match|Regexp.last_match]]</code>. فهو يغلف ويستوعب جميع نتائج التطابق مع تعبير نمطي. يمكن الوصول إلى النتائج من خلال المتغيرات الخاصة ‎<code>$&‎</code> و ‎<code>$'‎</code> و <code>$</code> و ‎<code>$`‎</code> و ‎<code>$1</code> و ‎<code>$2</code> وهكذا دواليك.     
 
 
تحتوي البيانات المرصوفة (Marshaled data) على أرقام إصدار رئيسية وثانوية مخزنة مع معلومات الكائن. في الاستخدام العادي ، تُحمّل فقط البيانات التي لها نفس رقم الإصدار الرئيسي، ورقم إصدار ثانوي مساوٍ أو أقل. وفي حال ضبط قيمة الراية "<code>verbose</code>" (عادةً باستخادم ‎<code>-d</code> أو <code>-v</code> أو <code>‎-w</code> أو ‎<code>-verbose</code>) يجب أن تتطابق الأرقام الرئيسية والثانوية تمامًا. إصدارات <code>Marshal</code> مستقلة عن إصدار  روبي المستخدم. يمكنك استخلاص رقم الإصدار عن طريق قراءة أول بتّتين من البيانات المشحونة.<syntaxhighlight lang="ruby">
 
str = Marshal.dump("thing")
 
RUBY_VERSION  #=> "1.9.0"
 
str[0].ord    #=> 4
 
str[1].ord    #=> 8
 
</syntaxhighlight>لا يمكن تفريغ بعض الكائنات: في حال محاولة تفريغ كائنات تتضمن ارتباطات (bindings) أو إجراءات (procedure) أو توابع، أو كائنات <code>IO</code>، أو كائنات أحادية (singleton)، فسيطلق الخطأ <code>[[Ruby/TypeError|TypeError]]</code>.
 
 
 
إن كنت تريد تسلسلا (serialization) مخصصًا (على سبيل المثال ، إذا كنت تريد إجراء التسلسل وفق تنسيق معين) ، أو إذا كان الصنف يحتوي كائنات غير قابلة للتسلسل، فيمكنك إعداد قواعد التسلسل الخاصة بك.
 
 
 
هناك طريقتان للقيام بذلك، يمكن للكائنات أن تعرّف إما <code>marshal_dump</code> و <code>marshal_load</code> أو ‎<code>_dump</code> و ‎<code>_load</code>. سيكون لـ <code>marshal_dump</code> الأولوية على ‎<code>_dump</code> في حال تعريف كليهما. قد يُنتج <code>marshal_dump</code> سلاسل نصية أصغر.
 
==اعتبارات أمنية==
 
يمكن للتابع <code>[[Ruby/Marshal/load|load]]</code> فك تسلسل (deserialize) تقريبا أي صنف مُحمّل في عمليات روبي. في العديد من الحالات، يمكن أن يؤدي ذلك إلى تنفيذ التعليمات البرمجية عن بُعد، إن حُملت البيانات المرصوفة (Marshal data) من مصدر غير موثوق به.
 
 
 
ونتيجة لذلك ، فالتابع <code>[[Ruby/Marshal/load|load]]::</code> ليس مناسبًا ليكون تنسيق تسلسل عام، ويجب ألا يتم تبديد  (unmarshal) البيانات المُدخلة من قبل المستخدم أو غيرها من البيانات غير الموثوقة.
 
 
 
إذا كنت تريد فك تسلسل (deserialize) البيانات غير الموثوقة، فاستخدم JSON أو تنسيق تسلسل آخر لا يمكنه أن يحمّل إلا الأنواع "البدائية" البسيطة، مثل السلاسل النصية والمصفوفات والقواميس وما إلى ذلك. لا تسمح أبدًا لمدخلات المستخدم أن تحدد أنواع عشوائية لفك التسلسل.
 
 
 
== marshal_dump و marshal_load ==
 
عند تفريغ (dumping) كائن سيتم استدعاء التابع <code>marshal_dump</code>. يجب أن يعيد التابع <code>marshal_dump</code> نتيجة تحتوي على المعلومات الضرورية لـ <code>marshal_load</code> لإعادة إنشاء الكائن. النتيجة يمكن أن تكون أي كائن.
 
 
 
عند تحميل كائن تم تفريغه باستخدام <code>marshal_dump</code>، يتم أولاً تحديد الكائن، ثم يُستدعى <code>marshal_load</code> وتُمرّر إليه النتيجة المُعادة من <code>marshal_dump</code>. يجب أن يعيد التابع <code>marshal_load</code> إنشاء الكائن انطلاقًا من المعلومات المُتضمنة في النتيجة.
 
 
 
مثال:<syntaxhighlight lang="ruby">
 
class MyObj
 
  def initialize name, version, data
 
    @name    = name
 
    @version = version
 
    @data    = data
 
  end
 
 
 
  def marshal_dump
 
    [@name, @version]
 
  end
 
 
 
  def marshal_load array
 
    @name, @version = array
 
  end
 
end
 
 
 
</syntaxhighlight>
 
 
 
== ‎_dump و ‎_load ==
 
استخدم التابعين ‎ <code>_dump</code> و <code>‎_load</code> عندما تريد تحديد الكائن الذي تود استعادته بنفسك.
 
 
 
عند تفريغ كائن، يُستدعى التابع ‎<code>_dump</code> مع تمرير عدد صحيح إليه إشارة إلى العمق الأقصى للكائنات التى ستُفرّغ (القيمة ‎ <code>-‎‎1</code>تعني تعطيل التحقق من العمق). يجب أن يعيد التابع  ‎ <code>_dump</code> سلسلة نصية تحتوي على المعلومات الضرورية لإعادة إنشاء الكائن.
 
 
 
يأخذ الصنف <code>method_load</code> سلسلة نصية ويستخدمها لإعادة كائن من نفس الصنف.
 
 
 
مثال:<syntaxhighlight lang="ruby">
 
class MyObj
 
  def initialize name, version, data
 
    @name   = name
 
    @version = version
 
    @data    = data
 
  end
 
 
 
  def _dump level
 
    [@name, @version].join ':'
 
  end
 
 
 
  def self._load args
 
    new(*args.split(':'))
 
  end
 
end
 
</syntaxhighlight>لما كان التابع <code>[[Ruby/Marshal/dump|dump]]</code> يعيد سلسلة نصية، يمكنك جعل التابع <code>have_dump</code>  يعيد سلسلة مرصوفة ‎‏ (Marshal string)،
 
 
 
 
==توابع الصنف العامة (Public Class Methods)==
 
==توابع الصنف العامة (Public Class Methods)==
===[[Ruby/MatchData/3D-3D | التابع ==]]===
+
===[[Ruby/MatchData/Equality|<code>==</code>]]===
معامل التساوي - يتطابق كائنان من النوع matchdata إذا كانت السلاسل النصية المستهدفة منهما، والأنماط ومواضع المُطابقة متماثلة.
+
يتحقق المعامل <code>==</code> من تطابق كائنان من النوع <code>matchdata</code> إذا كانت السلاسل النصية المستهدفة منهما، والأنماط ومواضع المُطابقة متماثلة.
===[[Ruby/MatchData/5B-5D | التابع []]]===
+
===[[Ruby/MatchData/index|<code>[]</code>]]===
تتصرف <code>MatchData</code> كمصفوفة، ويمكن الدخول إليهت باستخدام تقنيات فهرسة المصفوفات العادية.  التعبير <code>mtch[0]</code> مكافئ للمتغير الخاص <code>$&</code>، لذلك فهو يعيد كامل السلسلة النصية المُطابقة.  فيما تعيد التعابير <code>mtch[1]</code> و <code>mtch[2]</code> وهلم جرا، القيم المؤشرة (backdferences) المتطابقة (أجزاء النمط الموجودة بين قاسين).
+
تتصرف الكائنات <code>MatchData</code> كمصفوفة، لذا يمكن الوصول إليها باستخدام تقنيات فهرسة المصفوفات العادية (أي باستعمال المعامل <code>[]</code>).
===[[Ruby/MatchData/begin | التابع begin]]===
+
===[[Ruby/MatchData/begin|<code>begin</code>]]===
يعيد ظظظ موضع (offset) بداية العنصر رقم n من مصفوفة التطابق في السلسلة النصية. n يمكن أن يكون سلسلة نصية أو رمز للإشارة إلى جزء مُطابق معيّن.
+
يعيد موضع (مقدار إزاحة [offset]) بداية العنصر <code>n</code> من مصفوفة التطابق في السلسلة النصية.
===[[Ruby/MatchData/captures | التابع captures]]===
+
===[[Ruby/MatchData/captures|<code>captures</code>]]===
يعيد ظظظ مصفوفة الأجزاء المُطابقة (array of captures)؛ يكافئ <code>mtch.to_a[1..-1]</code>.
+
يعيد مصفوفة الأجزاء المُطابقة (array of captures)؛ يكافئ<code>mtch.to_a[1..-1]</code>.
===[[Ruby/MatchData/end | التابع end]]===
+
===[[Ruby/MatchData/end|<code>end</code>]]===
يعيد ظظظ موضع (offset) بداية العنصر رقم n من مصفوفة التطابق في السلسلة النصية. n يمكن أن يكون سلسلة نصية أو رمز للإشارة إلى جزء مُطابق معيّن.
+
يعيد موضع (offset) الحرف الذي يلي نهاية العنصر <code>n</code> من مصفوفة التطابق في السلسلة النصية.
===[[Ruby/MatchData/eql-3F | التابع eql?]]===
+
===[[Ruby/MatchData/eql-3F|<code>‎eql?‎</code>]]===
يتحقق من التساوي - كائنان من النوع matchdata يكونان متساويين إذا كانت السلاسل النصية التي يستهدفونها، والأنماط ومواضع التطابق متمائلة.
+
يتحقق من تساوي كائنين من النوع <code>[[Ruby/MatchData|matchdata]]</code>، إذ يعيد القيمة <code>true</code> إذا كانت السلاسل النصية المستهدفة منهما، والأنماط ومواضع المُطابقة متماثلة.
===[[Ruby/MatchData/hash | التابع hash]]===
+
===[[Ruby/MatchData/hash|<code>hash</code>]]===
ينتج ظظظ قاموسًا (hash) استنادًا إلى السلسلة النصية المستهدفة والتعبير النمطي regexp ومواضع المطابقة للكائن اmatchdata.
+
يعيد القيمة hash اعتمادًا على السلسلة النصية المستهدفة والتعبير النمطي (regexp) ومواضع المطابقة للكائن <code>[[Ruby/MatchData|matchdata]]</code>.
===[[Ruby/MatchData/inspect | التابع inspect]]===
+
===[[Ruby/MatchData/inspect|<code>inspect</code>]]===
يعيد ظظظ نسخة قابلة للطباعة من mtch.
+
يعيد نسخة قابلة للطباعة من الكائن الذي استُدعي معه.
===[[Ruby/MatchData/length | التابع length]]===
+
===[[Ruby/MatchData/length|<code>length</code>]]===
يعيد ظظظ عدد العناصر في مجموعة المطابقة.
+
يعيد عدد العناصر المتطابقة في مجموعة المُطابقة.
===[[Ruby/MatchData/named_captures | التابع named_captures]]===
+
===[[Ruby/MatchData/named captures|<code>named_captures</code>]]===
يعيد ظظظ قاموسًا (<code>Hash</code>) باستخدام الجزء المُطابق (capture) المعين .
+
يعيد الجدول <code>[[Ruby/Hash|Hash]]</code> الذي يحوي العناصر المتطابقة وجزء التعبير النمطي الذي طابقها من التعبير النمطي الكلي.
===[[Ruby/MatchData/names | التابع names]]===
+
===[[Ruby/MatchData/names|<code>names</code>]]===
يعيد ظظظ قائمة بأسماء الأجزاء المُلتقطة (captures) كمصفوفة من سلاسل نصية. حيث يكافئ نفس mtch.regexp.names.
+
يعيد قائمة بأسماء الأجزاء المُلتقِطَة (captures) في التعبير النمطي.
===[[Ruby/MatchData/offset | التابع offset]]===
+
===[[Ruby/MatchData/offset|<code>offset</code>]]===
يعيد ظظظ مصفوفة ثنائية تحتوي موضعي (offsets) البداية والنهاية للمطابقة رقم n. الوسيط n يمكن أن يكون سلسلة نصية أو رمزًا للإشارة إلى مطابقة (capture) معينة.
+
يعيد مصفوفة بعنصرين تحوي موضعي (مقدار إزاحة [offsets]) البداية والنهاية للمطابقة <code>n</code>.
===[[Ruby/MatchData/post_match | التابع post_match]]===
+
===[[Ruby/MatchData/post match|<code>post_match</code>]]===
يعيد ظظظ الجزء الذي يلي المطابقة (match) الحالية من السلسلة النصية الأصلية. وهو يكافئ المتغير الخاص <code>$'</code>.
+
يعيد الجزء الذي يلي المطابقة (match) الحالية من السلسلة النصية الأصلية. 
===[[Ruby/MatchData/pre_match | التابع pre_match]]===
+
===[[Ruby/MatchData/pre match|<code>pre_match</code>]]===
يعيد ظظظ الجزء الذي يسبق المطابقة (match) الحالية من السلسلة النصية الأصلية. وهو يكافئ المتغير الخاص <code>$`</code>.
+
يعيد الجزء الذي يسبق المطابقة (match) الحالية من السلسلة النصية الأصلية. 
===[[Ruby/MatchData/regexp | التابع regexp]]===
+
===[[Ruby/MatchData/regexp|<code>regexp</code>]]===
يعيد ظظظ التعبير النمطي regexp.
+
يعيد التعبير النمطي (regexp) الذي استُعمِل في عملية المطابقة.
===[[Ruby/MatchData/size | التابع size]]===
+
===[[Ruby/MatchData/size|<code>size</code>]]===
يعيد ظظظ عدد العناصر في مصفوفة المطابقة.
+
يعيد عدد العناصر في مصفوفة المطابقة.
===[[Ruby/MatchData/string | التابع string]]===
+
===[[Ruby/MatchData/string|<code>string</code>]]===
يعيد ظظظ نسخة مُجمدة من السلسلة النصية التي تم تمريرها إلى <code>match</code>.
+
يعيد نسخةً مُجمدةً من السلسلة النصية التي تم تمريرها إلى التابع <code>[[Ruby/Regexp/match|match]]</code> لمطابقتها مع تعبير نمطي.
===[[Ruby/MatchData/to_a | التابع to_a]]===
+
===[[Ruby/MatchData/to a|<code>to_a</code>]]===
يعيد ظظظ مصفوفة المطابقات.
+
يعيد مصفوفة المطابقات.
===[[Ruby/MatchData/to_s | التابع to_s]]===
+
===[[Ruby/MatchData/to s|<code>to_s</code>]]===
يعيد ظظظ كامل السلسلة النصية المُطابَقة.
+
يعيد كامل السلسلة النصية المُطابقة.
===[[Ruby/MatchData/values_at | التابع values_at]]===
+
===[[Ruby/MatchData/values at|<code>values_at</code>]]===
يستخدم ظظظ الفهارس المعطاة index للدخول إلى القيم المُطابقة، ثم يعيد مجموعة من المطابقات المقابلة.
+
يستخدم الفهارس المُمرَّرة إليه للوصول إلى قيم العناصر المُتطابقة ثم يعيدها.
 
 
 
 
 
==مصادر<span> </span>==
 
==مصادر<span> </span>==
*[http://ruby-doc.org/core-2.5.1/Marshal.html قسم الصنف Marshal في توثيق روبي الرسمي.]
+
*[http://ruby-doc.org/core-2.5.1/MatchData.html قسم الصنف MatchData في توثيق روبي الرسمي.]<noinclude>{{DISPLAYTITLE: الصنف <code>MatchData</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>MatchData</code> في روبي}}</noinclude>
 
 
[[تصنيف: Ruby]]
 
[[تصنيف: Ruby]]
[[تصنيف: MatchData]]
+
[[تصنيف: Ruby Class]]
 +
[[تصنيف: Ruby MatchData]]

المراجعة الحالية بتاريخ 11:44، 17 نوفمبر 2018

الصنف MatchData هو نوع المتغير الخاص ‎$~‎ ، كما أنه نوع الكائنات المُعادة من Regexp.match و Regexp.last_match. فهو يغلف ويستوعب جميع نتائج التطابق مع تعبير نمطي. يمكن الوصول إلى النتائج من خلال المتغيرات الخاصة ‎$&‎ و ‎$'‎ و $ و ‎$`‎ و ‎$1 و ‎$2 وهكذا دواليك.

توابع الصنف العامة (Public Class Methods)

==

يتحقق المعامل == من تطابق كائنان من النوع matchdata إذا كانت السلاسل النصية المستهدفة منهما، والأنماط ومواضع المُطابقة متماثلة.

[]

تتصرف الكائنات MatchData كمصفوفة، لذا يمكن الوصول إليها باستخدام تقنيات فهرسة المصفوفات العادية (أي باستعمال المعامل []).

begin

يعيد موضع (مقدار إزاحة [offset]) بداية العنصر n من مصفوفة التطابق في السلسلة النصية.

captures

يعيد مصفوفة الأجزاء المُطابقة (array of captures)؛ يكافئmtch.to_a[1..-1]‎.

end

يعيد موضع (offset) الحرف الذي يلي نهاية العنصر n من مصفوفة التطابق في السلسلة النصية.

‎eql?‎

يتحقق من تساوي كائنين من النوع matchdata، إذ يعيد القيمة true إذا كانت السلاسل النصية المستهدفة منهما، والأنماط ومواضع المُطابقة متماثلة.

hash

يعيد القيمة hash اعتمادًا على السلسلة النصية المستهدفة والتعبير النمطي (regexp) ومواضع المطابقة للكائن matchdata.

inspect

يعيد نسخة قابلة للطباعة من الكائن الذي استُدعي معه.

length

يعيد عدد العناصر المتطابقة في مجموعة المُطابقة.

named_captures

يعيد الجدول Hash الذي يحوي العناصر المتطابقة وجزء التعبير النمطي الذي طابقها من التعبير النمطي الكلي.

names

يعيد قائمة بأسماء الأجزاء المُلتقِطَة (captures) في التعبير النمطي.

offset

يعيد مصفوفة بعنصرين تحوي موضعي (مقدار إزاحة [offsets]) البداية والنهاية للمطابقة n.

post_match

يعيد الجزء الذي يلي المطابقة (match) الحالية من السلسلة النصية الأصلية. 

pre_match

يعيد الجزء الذي يسبق المطابقة (match) الحالية من السلسلة النصية الأصلية. 

regexp

يعيد التعبير النمطي (regexp) الذي استُعمِل في عملية المطابقة.

size

يعيد عدد العناصر في مصفوفة المطابقة.

string

يعيد نسخةً مُجمدةً من السلسلة النصية التي تم تمريرها إلى التابع match لمطابقتها مع تعبير نمطي.

to_a

يعيد مصفوفة المطابقات.

to_s

يعيد كامل السلسلة النصية المُطابقة.

values_at

يستخدم الفهارس المُمرَّرة إليه للوصول إلى قيم العناصر المُتطابقة ثم يعيدها.

مصادر