سؤال

ملحوظة المحرر:إن بناء الجملة في هذا السؤال يسبق Rust 1.0 وينتج عن بناء الجملة المحدث 1.0 أخطاء مختلفة، لكن المفاهيم العامة لا تزال كما هي في Rust 1.0.

لدي بنية T مع a name الحقل، أود إرجاع هذه السلسلة من name وظيفة.لا أريد نسخ السلسلة بأكملها، فقط المؤشر:

struct T {
     name: ~str,
}

impl Node for T {
     fn name(&self) -> &str { self.name }
     // this doesn't work either (lifetime error)
     // fn name(&self) -> &str { let s: &str = self.name; s }
}

trait Node {
     fn name(&self) -> &str;
}

لماذا هذا الخطأ؟ما هي أفضل طريقة لإرجاع &str من وظيفة؟

هل كانت مفيدة؟

المحلول

عليك أن تأخذ إشارة إلى self.name والتأكد من عمر &self و &str هي نفسها:

struct T {
    name: String,
}

impl Node for T {
    fn name<'a>(&'a self) -> &'a str {
        &self.name
    }
}

trait Node {
    fn name(&self) -> &str;
}

تستطيع ايضا استخذام حذف مدى الحياة, ، كما هو موضح في تعريف السمة.في هذه الحالة، فإنه يربط تلقائيًا عمر كل كائن self وعاد &str.

ألقِ نظرة على فصول الكتاب هذه:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top