为什么不能在 Rust 的同一结构中存储值和指向它的引用?
大家好!我开始学习 Rust,遇到了一个几天都无法解决的问题。
我正在编写一个配置文件解析器。我有一个 `Parser` 结构体,它从字符串中读取数据并提供单词迭代器。以下是简化代码:
```rust
struct Parser {
data: String,
words: Vec<&str>, // 指向 data 的引用
}
impl Parser {
fn new(input: &str) -> Self {
let data = input.to_string();
let words: Vec<&str> = data.split_whitespace().collect();
Parser { data, words } // 错误!
}
}
```
编译器报错:`cannot move out of 'data' because it is borrowed`。我明白 `words` 包含指向 `data` 的引用,但 `data` 和 `words` 在同一个结构体中!难道 Rust 不应该理解它们共存吗?
我尝试了不同方法:使用 `Rc`、改变字段顺序、添加生命周期——都没用。也许我设计结构体的方式不对?在 Rust 中到底如何存储...