تقليديًا، تتضمن مقارنة مؤشرين للوظائف غير الصفرية في Go استخدام == أو != عوامل التشغيل. ومع ذلك، في أعقاب التغييرات الأخيرة، يؤدي هذا النهج الآن إلى حدوث أخطاء.
ينبع التخلص من مقارنة مساواة المؤشر للوظائف من مفهوم المساواة مقابل الهوية. في Go، يقوم المشغلون == و != بتقييم تكافؤ القيم، وليس الهوية. ويهدف هذا التمييز إلى منع الخلط بين هذه المفاهيم.
بالإضافة إلى ذلك، تؤثر مقارنات الوظائف على الأداء. على سبيل المثال، يجب تحسين عمليات الإغلاق المجهولة التي لا تشير إلى متغيرات خارجية في تنفيذ واحد بواسطة المترجم. قد تؤدي مقارنة مؤشرات الوظائف إلى إعاقة هذا التحسين، مما يتطلب إنشاء ديناميكي لعمليات إغلاق جديدة في وقت التشغيل.
على الرغم من أنه من الممكن تحديد هوية الوظيفة باستخدام حزمة الانعكاس، فمن المهم ملاحظة ذلك يستلزم هذا النهج سلوكًا غير محدد. نتائج مثل هذه المقارنات غير موثوقة، حيث قد يقرر المترجم طي وظائف متعددة في تنفيذ واحد.
لمقارنة مؤشرات الوظائف بشكل فعال، يمكن استخدام النهج التالي:
package main import "fmt" func F1() {} func F2() {} var F1_ID = F1 // Assign a unique variable to F1 var F2_ID = F2 // Assign a unique variable to F2 func main() { f1 := &F1_ID // Take the address of F1_ID f2 := &F2_ID // Take the address of F2_ID // Compare pointers fmt.Println(f1 == f1) // Prints true fmt.Println(f1 == f2) // Prints false }
من خلال استخدام المؤشرات للمتغيرات الفريدة المرتبطة بكل وظيفة، يمكنك اكتشاف مساواة المؤشر بين الوظائف بشكل فعال.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3