Em Rust: qual a diferença entre clone() e to_owned() e quando usar cada um?
Olá, colegas! Comecei a estudar Rust recentemente e estou constantemente confuso com os métodos clone() e to_owned(). Ambos parecem criar uma cópia dos dados, mas a documentação diz que são coisas diferentes. Na prática, vejo que clone() pode ser chamado em qualquer tipo que implemente a trait Clone, enquanto to_owned() só pode ser chamado em tipos com a trait ToOwned. Mas não é a mesma coisa?
Aqui está um exemplo específico que me confunde:
```rust
let s: &str = "hello";
let a: String = s.to_owned();
let b: String = s.to_string(); // também funciona
// Por que não posso escrever s.clone() para obter uma String?
// Afinal, clone() retorna &str, não String!
```
Outro exemplo: estou trabalhando com slices. Tenho &[i32] e quero obter Vec. Posso fazer slice.to_owned() — funciona. Mas se fizer slice.clone(), obtenho novamente &[i32], não Vec. Por que isso?
Parece-me que to_owned() é um método mágico que "transforma" dados emprestados em dados com propriedade. Já clone() apenas copia