"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > متى يتم استخدام وسيطات الشريحة المقيدة بأنواع الشرائح مقابل وسيطات الشريحة العامة في Go؟

متى يتم استخدام وسيطات الشريحة المقيدة بأنواع الشرائح مقابل وسيطات الشريحة العامة في Go؟

تم النشر بتاريخ 2024-11-09
تصفح:765

When to Use Slice Arguments Constrained to Slice Types vs. Generic Slice Arguments in Go?

وسيطات الشريحة العامة: فهم التمييز

في Go، تقدم البرمجة العامة معلمات الكتابة التي تسمح للوظائف بالعمل على أنواع مختلفة. أحد مجالات الاهتمام هو التمييز بين وسيطات الشريحة المقيدة بأنواع الشرائح ووسيطات الشريحة العامة.

وسيطة الشريحة المقيدة بأنواع الشرائح

ضع في اعتبارك الشرائح. دالة النمو مع الوسيطة الأولى مقيدة بـ ~[]E. هذا يعني أن نوع هذه الوسيطة يجب أن يكون نوع شريحة مع نوع عنصر E.

وسيطة الشريحة العامة

في المقابل، ضع في الاعتبار الدالة Slices.Contains مع كتابة الوسيطة الأولى ببساطة كـ []E. يسمح هذا بأي نوع شريحة بنوع عنصر E.

اختلافات عملية

في البداية، قد يبدو أن هذين النوعين من وسيطات الشريحة يتصرفان بشكل مشابه، حيث أنهما كلاهما يسمح للوظائف بالوصول إلى عمليات الشريحة مثل الإلحاق والنطاق. ومع ذلك، هناك فرق دقيق ولكنه مهم عندما يتعلق الأمر بإرجاع شريحة.

إرجاع شريحة

إذا كانت الوظيفة تتطلب إرجاع شريحة من نفس النوع مثل شريحة الإدخال، يجب عليك استخدام وسيطة شريحة مقيدة بأنواع الشرائح (~[]E). هذا يضمن أن الشريحة التي تم إرجاعها لها النوع الأساسي الصحيح.

مثال

دعونا نقارن بين تطبيقي Grow(): أحدهما يستخدم ~[]E والآخر باستخدام [ ]E.

func Grow[S ~[]E, E Any](s S, n int) S { // ... } func Grow2[E أي](s []E, n int) []E { // ...
func Grow[S ~[]E, E any](s S, n int) S {
    // ...
}

func Grow2[E any](s []E, n int) []E {
    // ...
}

الاستنتاج

باختصار، إذا كنت بحاجة إلى إرجاع شريحة من نفس النوع اكتب كشريحة الإدخال، فيجب عليك استخدام وسيطة شريحة مقيدة بأنواع الشرائح (~[]E). بخلاف ذلك، يعد استخدام وسيطة شريحة عامة أمرًا كافيًا.

بيان الافراج أعيد طبع هذه المقالة على: 1729666579 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3