我读到这里是
编写了共享引用类型
&type,或者&'a type在您需要指定显式生存期时。
理解&是为了shared reference但不了解Rust语言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);
}
Run Code Online (Sandbox Code Playgroud)
是什么'a在struct Person<'a> { }手段?我可以struct使用struct Person<'type> { }或构建相同的内容struct Person<T> { }吗?
那是什么意思name: &'a str呢?
如果不想使用该代码,该如何重新编码 <'a>
Has*_*sef 12
在'a写着“寿命”。从技术上讲,每个引用都有与之关联的生命周期,但是在常见情况下,编译器允许您忽略(即忽略,请参见“ 生命周期消除 ”)。
fn bar<'a>(...)
Run Code Online (Sandbox Code Playgroud)
函数可以在<>s 之间具有“通用参数” ,其中的寿命是一种。该<>用于声明寿命。这表示酒吧有一个终身,'a。
Rust有两种主要类型的字符串:&str和String。在&str被称为‘string slices’。字符串切片具有固定的大小,不能进行突变。它是对UTF-8字节序列的引用。
let greeting = "Hello there."; // greeting: &'static str
Run Code Online (Sandbox Code Playgroud)
“你好。” 是a string literal,类型为&'static str。字符串文字是静态分配的字符串切片,这意味着它已保存在我们的已编译程序中,并且在其运行的整个过程中都存在。问候语绑定是对此静态分配的字符串的引用。任何需要字符串切片的函数都将接受字符串文字。
在上面的例子中
struct Person<'a> { }
Run Code Online (Sandbox Code Playgroud)
要求包含<'a>,其name定义如下:
name: &'a str,
Run Code Online (Sandbox Code Playgroud)
称为:
let name = "Peter";
Run Code Online (Sandbox Code Playgroud)
如果有兴趣避免使用,'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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2784 次 |
| 最近记录: |