我读到这里是
编写了共享引用类型
&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 次 |
最近记录: |