طرق الاتصال على أنواع المؤشر: طرق الاتصال مع جهاز الاستقبال T لنوع المؤشر *T
سؤال:
]تنص مواصفات Go على أن مجموعة الطريقة من نوع المؤشر T تتضمن مجموعة الطريقة من النوع المقابل لها T. هل هذا يعني أنه يمكننا استدعاء الأساليب باستخدام جهاز الاستقبال T على متغيرات من النوع T؟
الإجابة:
بينما تشير المواصفات إلى ذلك، من المهم ملاحظة أنه لا يمكنك استدعاء أساليب * مباشرة T على T. بدلاً من ذلك، يقوم المترجم تلقائيًا بإلغاء مرجعية المتغير إلى &T ويستدعي الطريقة، وينفذ بشكل فعال (&T).m().تم تعريف هذا السلوك بشكل صريح في مواصفات Go:"المكالمات: استدعاء الأسلوب x.m() صالح إذا كانت مجموعة الطريقة (نوع) x تحتوي على m ويمكن تعيين قائمة الوسائط إلى قائمة المعلمات m. إذا x قابل للعنونة ومجموعة أساليب &x تحتوي على m، وx.m() هو اختصار لـ (&x).m(). "العرض التوضيحي: يوضح المثال التالي هذا السلوك:
الحزمة الرئيسية يستورد ( "إف إم تي" "يعكس" ) اكتب بنية المستخدم {} func (هذا * المستخدم) SayWat() { fmt.Println(reflect.TypeOf(هذا)) fmt.Println("WAT\n") } الوظيفة الرئيسية () { فار المستخدم = المستخدم{} fmt.Println(reflect.TypeOf(المستخدم)) user.SayWat()
package main import ( "fmt" "reflect" ) type User struct{} func (this *User) SayWat() { fmt.Println(reflect.TypeOf(this)) fmt.Println("WAT\n") } func main() { var user = User{} fmt.Println(reflect.TypeOf(user)) user.SayWat() }الاستثناء:
ومع ذلك، هذا ينطبق فقط على المتغيرات القابلة للعنونة. إذا حاولت استدعاء أسلوب مؤشر على قيمة غير قابلة للعنونة، فسوف تواجه خطأ. على سبيل المثال:
func aUser() User { عودة المستخدم {} } ... aUser().SayWat() // خطأ: لا يمكن استدعاء أسلوب المؤشر على aUser()
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3