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);
}