سؤال
ملحوظة المحرر:إن بناء الجملة في هذا السؤال يسبق 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
.
ألقِ نظرة على فصول الكتاب هذه:
لا تنتمي إلى StackOverflow