为什么不能在 Rust 的同一个结构中存储值和它的引用?
大家好!我开始学习 Rust 时遇到了一个让我非常困惑的问题。我试图编写一个结构体,它同时存储一些数据和指向这些数据的引用。例如,我想创建一个包含字符串及其第一个字符(指向该字符串的引用)的结构体。
以下是我的尝试:
```rust
struct MyStruct {
data: String,
first_char: &str, // 指向 data 的引用
}
fn main() {
let text = String::from("Hello");
let first = &text[..1];
let s = MyStruct { data: text, first_char: first };
println!("{}", s.first_char);
}
```
编译器报错:`error[E0382]: borrow of moved value: 'text'`。我明白,当我把 `text` 移动到结构体中时,不能再使用 `first`,因为它指向的是旧地址。但如何正确设计这样的结构体呢?在其他语言中,我可以轻松地存储对象和指向其字段的指针。为什么 Rust 如此严格?有没有办法存储值和它的引用?