وسيطات الشريحة العامة: فهم التمييز
في 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). بخلاف ذلك، يعد استخدام وسيطة شريحة عامة أمرًا كافيًا.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3