Rust: تجاوز على أنواع الحاويات المزدوجة المتداخلة

تم إنشاؤها على ٧ يونيو ٢٠١٦  ·  3تعليقات  ·  مصدر: rust-lang/rust

لدي الكود التالي:

https://play.rust-lang.org/؟gist=b8c78d5084a9b9ab7c53a2a9faa022af&version=stable&backtrace=0

كما يتضح ، يعمل # [test] بشكل جيد ، ولكن إذا حاولت إجراء اختبار شحن عليه ، فسأحصل على الخطأ التالي في doc_test:

الإخفاقات:

---- vec :: <& 'a Vector> :: add_0 stdout ----
خطأ: تجاوز تقييم المتطلب <&_ as std::ops::Add<_>>::Output [E0275]
: 1: 1: 1: 1 ملاحظة: ضع في اعتبارك إضافة سمة #![recursion_limit="128"] إلى صندوقك
خطأ: إحباط بسبب خطأ سابق

يبدو أن الوظيفة التي ستفشل تعتمد على المترجم. لدي انطباع بأنه في المنزل ستفشل كل من تطبيقات Add for & Vector ، ولكن قد أكون مخطئًا وسوف أقوم بتحديث هذه المشكلة عندما أصل إلى المنزل.

هذه هي نسخة الصدأ التي أستخدمها هنا:

rustc 1.10.0-dev (14f61c87f 2016-04-18)
ثنائي: rustc
الالتزام-التجزئة: 14f61c87ff02e57d565d4fab4ce790156c9a596e
تاريخ الالتزام: 2016-04-18
المضيف: x86_64-unknown-linux-gnu
الإصدار: 1.10.0-dev

يمكن العثور على المناقشة حول منتديات الصدأ هنا:
https://users.rust-lang.org/t/weird-problems-with-recursion-in-type-bounds-in-tests-on-libs/6101/4

تحديث: كنت مخطئا ، في المنزل أحصل على نفس السلوك. ولكن مثل mbrubeck قال في مناقشة المنتدى ، إذا قمت بإزالة الأخيرين ، فإن الإضافة تشير إلى أن كل شيء يعمل.

A-typesystem C-bug T-compiler

ال 3 كومينتر

في حالة كونه مفيدًا ، فإن هذا البرنامج الأقصر كثيرًا يعطي سلوكًا مشابهًا:
https://play.rust-lang.org/؟gist=2f793999729aec2cd8274157f7012e5d&version=stable&backtrace=0

قارن هذا الإصدار ، الذي يجمع ويعمل بشكل جيد:
https://play.rust-lang.org/؟gist=6ff433c8cc94c22985180210cc3a8e7d&version=stable&backtrace=0

إليك تصغير إضافي لبرنامج @ apt1002 :

https://play.rust-lang.org/؟gist=0a77e1bd0f8e539d8a85ee30ed63b1f6&version=stable&backtrace=0

الخيط المشترك في كل هذه البرامج الفاشلة هو أن هناك طبقتين من "الحاوية" ، سواء كان ذلك & ، أو Vector ، أو بنية مجمعة.

فكرة جيدة لإزالة هذا الهراء مدى الحياة. أكثر وضوحا.

أعتقد أننا ارتكبنا أخطاء على حد سواء! كان لي أن "حيث الهدف: من <& 'm T>" كان يجب أن يكون " حيث الهدف: لـ <' a> From <& 'a T> ". أنا فقط علمت عن هذا. لك أن "(a.0) .0" يجب أن يكون " C ((a.0) .0) ".

لم تتغير رسالة الخطأ في كلتا الحالتين ، أي ما زالت تبدو وكأنها خطأ في المترجم. أعتقد أن هذه الأمثلة يجب أن تعمل ، ولكن على الأقل لا يعطي المترجم رسالة الخطأ الصحيحة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات