التابع Array.pack
في روبي
يُحزِّمُ (packs
) التابع pack
محتويات المصفوفة التي استُدعيت معه على شكل تسلسل ثنائي (binary
sequence
) وفقًا للمُوجِّهات (directives
) الواردة في المعامل aTemplateString
؛ يمكن أن يتبع المُوجِّهات ","
" و "A"
" و ""a"
" عددًا يحدّد عرض الحقل الناتج. قد تأخذ المُوجّهات المتبقية عددًا أيضًا مما يشير إلى عدد عناصر المصفوفة المطلوب تحويلها.
إذا كان العدد يمثِّل محرف النجمة ("*")، فستُحوَّل جميع عناصر المصفوفة المتبقية. يمكن أن تُتبَع أيٌّ من المُوجّهات ""Z"
" بشرطة سفلية (""
") أو إشارة تعجب ("!") لاستخدام الحجم الأصلي للمنصة الأساسية ("
"sSiIlL"
) للنوع المحدد؛ خلا ذلك، ستستخدم حجمًا مستقلًا عن المنصة ("_"
-"!"
underlying
). يتم تجاهل المسافات البيضاء في سلسلة القالب.
في حال تمرير المعامل platform
وكانت سعته (platform
) كافية، فسيستخدمها التابع independent
كمخزن مؤقت ( size
) ثمَّ يعيدها. عندما تُحدَّد الإزاحة (aBufferString
) ببداية capacity
، فستُملَأ النتيجة بعد الإزاحة. في حالة وجود محتويات سابقة في pack
وكان طولها أكبر من الإزاحة buffer
، فسيُكتَب الناتج فوق ما بقي من offset
. أمّا إذا كان طولها أصغر، فسيُملَأ الفراغ المتبقي بالمحرف "\0".
البنية العامة
pack( aTemplateString ) → aBinaryString
pack( aTemplateString, buffer: aBufferString ) → aBufferString
المعاملات
aTemplateString
يأخذ هذا المعامل إحدى قيم الموجهات المستعملة مع التابع pack
وهي:
(لا تنس ترجمة الموجهات)
[a
]
buffer
: aBufferString
مخزن مؤقت يستعمل -إن كانت سعته كافية- لتخزين ناتج تنفيذ التابع pack
فيه.
انتبه إلى أنَّ الخيار ""buffer
: لا يضمن عدم تخصيص الذاكرة في التابع pack
. إذا كانت سعة aBufferString
غير كافية، فسيَحجز التابع pack
حجمًا مناسبًا من الذاكرة.
القيم المعادة
يعاد كائنٌ من النوع aBinaryString
، أو تخزَّن هذه البيانات المعادة في المعامل aBufferString
(إن أعطي) ثم يعاد.
أمثلة
أمثلة على استخدام التابع pack
:
a = [ "a", "b", "c" ]
n = [ 65, 66, 67 ]
a.pack("A3A3A3") #=> "a b c "
a.pack("a3a3a3") #=> "a\000\000b\000\000c\000\000"
n.pack("ccc") #=> "ABC"
انظر أيضًا
- التابع
hash
: يعيد قيمةHash
للمصفوفة التي استُدعيت معه.
مصادر
- قسم التابع pack في الصنف Array في توثيق روبي الرسمي.
[a]أحببت تذكيرك بإضافة الموجهات إن كنت نسيت أن تترجمها. +meedawi.med@gmail.com _تم التعيين إلى محمد الميداوي_