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

متى يتم استخدام ~[]E vs []E لوسيطات الشريحة في Go؟

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

When to Use ~[]E vs []E for Slice Arguments in Go?

استكشاف التفاصيل الدقيقة لوسائط الشريحة العامة

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

Type Constraints

الوسيطة الأولى لـ يحتوي على النوع []E، حيث يكون E مقيدًا بالقابل للمقارنة، مما يشير إلى أن E يجب أن يكون قابلاً للمقارنة . من ناحية أخرى، تحتوي الوسيطة الأولى لـ Grow على النوع S، مقيد بـ ~[]E، مما يشير إلى أن S يجب أن يحتوي على نوع أساسي يمثل شريحة من E.

الآثار العملية

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

أهمية معلمة النوع المقيدة بالشريحة

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

عرض توضيحي مع Grow

لنفكر في تطبيقين لـ Grow:

func Grow[S ~[]E, E any](s S, n int) S // Grow returns a slice of the same type as s
func Grow2[E any](s []E, n int) []E // Grow2 returns a slice of type []E

عند تمرير شريحة من نوع مخصص مع شريحة كنوع أساسي لها يمكن لـ Grow إرجاع قيمة من نفس النوع، بينما لا يمكن لـ Grow2 ذلك. يمكن لـ Grow2 فقط إرجاع قيمة من نوع شريحة غير مسمى، []E.

مثال

type ints []int // user-defined slice type ints
x := []int{1} // initialize a slice x of type []int
x2 := Grow(x, 10) // x2 will be of type []int
y := ints{1} // initialize a slice y of type ints
y2 := Grow(y, 10) // y2 will be of type ints

هنا، Grow2(y, 10) يتلقى قيمة من النوع ints لكنه يُرجع قيمة من النوع []int، وهي ليست كذلك السلوك المقصود.

الاستنتاج

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

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

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

Copyright© 2022 湘ICP备2022001581号-3