Por que não é possível armazenar um valor e uma referência a ele na mesma estrutura em Rust?
Olá a todos! Comecei a estudar Rust e me deparei com um problema que me deixou muito confuso. Estou tentando escrever uma estrutura que armazena alguns dados e, ao mesmo tempo, uma referência a esses dados dentro de si mesma. Por exemplo, quero criar uma estrutura que contenha uma string e seu primeiro caractere — uma referência a essa string.
Aqui está o que estou tentando fazer:
```rust
struct MyStruct {
data: String,
first_char: &str, // referência a data
}
fn main() {
let text = String::from("Hello");
let first = &text[..1];
let s = MyStruct { data: text, first_char: first };
println!("{}", s.first_char);
}
```
O compilador emite um erro: `error[E0382]: borrow of moved value: 'text'`. Entendo que quando movo `text` para a estrutura, não posso mais usar `first`, porque ele referencia o endereço antigo. Mas como projetar corretamente tal estrutura? Em outras linguagens, eu podia armazenar um objeto e um ponteiro para seu campo sem problemas. Por que Rust é tão rigoroso? Existe alguma maneira de armazenar um valor e uma referência a ele na mesma estrutura?