عند محاولة إرجاع قيم متعددة في Go، قد يبدو الأمر محيرًا حول سبب صلاحية بعض الجمل بينما البعض الآخر ليس كذلك. لتوضيح ذلك، خذ بعين الاعتبار مقتطفي التعليمات البرمجية التاليين:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
مقتطف الرمز الأول صالح ويعرض كلاً من قيم المعلومات والقيم المنطقية. ومع ذلك، فإن المقتطف الثاني غير صالح:
func FindUserInfo(id string) (Info, bool) { return all[id] }
وهذا يثير التساؤل حول سبب صحة المقتطف الأول والثاني ليس كذلك. بالإضافة إلى ذلك، قد يتساءل المرء عما إذا كانت هناك طريقة لتجنب استخدام المتغيرات المؤقتة مثلها والموجودة.
يكمن مفتاح فهم هذا السلوك في "الفاصلة" حسنًا "النمط. في Go، عند الوصول إلى الخريطة، تكون النتيجة زوجًا من القيم: القيمة المرتبطة بالمفتاح وقيمة منطقية تشير إلى ما إذا كان المفتاح موجودًا في الخريطة. غالبًا ما يُستخدم هذا للتمييز بين المفتاح المفقود والقيمة الصفرية.
في مقتطف التعليمات البرمجية الأول، يُرجع تعبير all[id] زوجًا من القيم، التي تم تعيينها له وتكون موجودة. ثم تقوم عبارة الإرجاع بإرجاع هذه القيم.
يلعب المترجم دورًا في تحديد ما إذا كانت مهمة متعددة القيم صالحة أم لا. إذا قامت الدالة بإرجاع قيم متعددة ولكن المستلم الموجود على الجانب الأيسر لديه متغير واحد فقط، فسيصدر المترجم خطأ. وذلك لأن المترجم يتوقع أن يتطابق عدد القيم التي يتم إرجاعها مع عدد المتغيرات التي تستقبلها.
في حالة مقتطف الكود الثاني، فإن التعبير المرجع all[id] يُرجع قيمة واحدة فقط، وهي غير متوافقة. مع المتغيرين على الجانب الأيسر. وبالتالي، يقوم المترجم بالإبلاغ عن خطأ.
لسوء الحظ، لا توجد طريقة لتجنب استخدام المتغيرات المؤقتة عند إرجاع قيم متعددة في دالة Go. وذلك لأن المترجم يتطلب عدد القيم التي يتم إرجاعها لتتناسب مع عدد المتغيرات التي تستقبلها. ومع ذلك، من الممكن تقليل استخدام المتغيرات المؤقتة باستخدام قيم الإرجاع المسماة أو إرجاع البنية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3