Rust 什么是&';用铁锈语言写的一封信

Rust 什么是&';用铁锈语言写的一封信,rust,Rust,我读到了 共享引用类型是在需要指定显式生存期时写入的&type,或&A type 已理解的&用于共享参考,但不理解类型和'a在语言上的区别 在我读到的代码中: #[derive(Debug)] struct Person<'a> { name: &'a str, age: u8 } fn main() { let name = "Peter"; let age = 27; let peter = Person { name, age

我读到了

共享引用类型是在需要指定显式生存期时写入的
&type
,或
&A type

已理解的
&
用于
共享参考
,但不理解
类型
'a
在语言上的区别

在我读到的代码中:

#[derive(Debug)]
struct Person<'a> {
    name: &'a str,
    age: u8
}

fn main() {
    let name = "Peter";
    let age = 27;
    let peter = Person { name, age };

    // Pretty print
    println!("{:#?}", peter);
}
#[派生(调试)]
struct Person{}
的意思是什么? 我可以用我找到的
struct Person构建相同的
struct
,这就解释了我的问题

'a
读作“生命周期a”。从技术上讲,每个引用都有一些与之相关的生存期,但编译器允许您在常见情况下省略(即省略,请参见“”)它们

fn bar<'a>(...)
“你好。”是一个
字符串文本
,其类型为
&'static str
。字符串文本是一个静态分配的字符串片段,这意味着它保存在编译程序中,并在整个运行期间存在。问候语绑定是对这个静态分配字符串的引用。任何需要字符串片段的函数也将接受字符串文本

在上面的例子中

struct Person<'a> {  }
其名称为:

let name = "Peter";
如果有兴趣避免使用
'a
,则可以将上述代码重新编写为:

#[derive(Debug)]
struct Person {    // instead of: struct Person<'a> {
    name: String,  // instead of: name: &'a str 
    age: u8
}

fn main() {
    let name = String::from("Peter");  // instead of: let name = "Peter"; which is &'static str
    let age = 27;
    let peter = Person { name, age };

    // Pretty print
    println!("{:#?}", peter);
}
#[派生(调试)]

struct Person{//,而不是:struct Person谢谢你的详细简明解释。嗨,我发现你的答案对于像我这样的新手来说不够简单。环顾四周一段时间后,我想对这个问题提供一个更简单的解释:“为什么
'a
在那里?”----因为结构定义将其绑定到引用的对象(在本例中,每个
struct Person
实例都引用了一个
&str
),所以您需要具体地声明一个任意生命周期,并将这两件事绑定在一起:您希望
struct Person
实例的寿命与其引用的对象一样长(因此,
persontanks@dimitrissfouns我在答案中添加了您的陈述,希望它能帮助其他人:)
let name = "Peter";
#[derive(Debug)]
struct Person {    // instead of: struct Person<'a> {
    name: String,  // instead of: name: &'a str 
    age: u8
}

fn main() {
    let name = String::from("Peter");  // instead of: let name = "Peter"; which is &'static str
    let age = 27;
    let peter = Person { name, age };

    // Pretty print
    println!("{:#?}", peter);
}