ال

التجميع في Rust

{zero: "لا توجد تمارين", one: "1 تمرين", two: "تمرينان", few: "%{count} تمارين", many: "%{count} تمرينًا", other: "%{count} تمرين"}

نبذة عن التجميع

لفهم دالة collect، من المهم أن تعرف أنها تُستخدم لإنهاء مكرّر. وتذكّر أن المكرّر تسلسل من العناصر يمكن ربطه بمكرّرات أخرى. المكرّرات كسولة، أي أنها لا تُنفَّذ إلا عندما تستدعي كودًا يستهلك المكرّر. ومن هذا الكود حلقات for والمهايئات المستهلكة. تعالج المهايئات المستهلكة جميع العناصر في المكرّر لتُنتج نوعًا ما من المخرجات.

collect هو أحد هذه المهايئات المستهلكة، ويمكن استخدامه لإنشاء نسخة من أي نوع يُنفّذ سمة FromIterator. وهذه السمة مُنفَّذة لجميع المجموعات في المكتبة القياسية. ولأن FromIterator مُنفَّذة لكثير من الأنواع، فأنت بحاجة إلى إخبار Rust بنوع المجموعة التي تريدها. على سبيل المثال، إذا أردنا Vec<char> من مقطع نصي، فيمكننا إدراج النوع في استدعاء collect هكذا

    let my_chars = "Hello, World!".chars().collect::<Vec<char>>();
// since the item type of the `String::chars()` iterator can be inferred to be `char`, we can omit that information
// let my_chars = "Hello, World!".chars().collect::<Vec<_>>();

تُعرف النقطتان المزدوجتان والأقواس الزاوية الخارجية (أي ::<_>) باسم turbofish. وفي هذه الحالة تكون صيغة turbofish أكثر ضجيجًا من اللازم. وبتحديد النوع في الارتباط نفسه، تستطيع collect أن تستنتج المجموعة التي ينبغي إنشاؤها بصيغة أقل ضجيجًا.

    let my_chars: Vec<char> = "Hello, World!".chars().collect();
// or
// let my_chars: Vec<_> = "Hello, World!".chars().collect();

وإذا أردنا String بأحرف معكوسة، فيمكننا فعل ذلك هكذا

    let rev_chars: String = "Hello, World!".chars().rev().collect();

استنتاج الأنواع في Rust قوي بما يكفي لدرجة أننا لا نحتاج أحيانًا إلى كتابة النوع صراحةً في السطر:

fn get_reversed_chars(phrase: &str) -> Vec<char> {
    phrase.chars().rev().collect()
}

نوع الإرجاع في دالة get_reversed_chars يجعل دالة collect تستنتج المجموعة التي ينبغي أن تُرجعها. لكن هنا يجب علينا تحديد Vec<char> وليس Vec<_>، لأن Rust لا يستنتج الأنواع في توقيعات الدوال. والهدف من ذلك أن يعرف قارئ الكود بسرعة الأنواع التي تستهلكها الدالة والتي تُرجعها.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة