En Rust : quelle est la différence entre clone() et to_owned() et quand utiliser quoi ?
Salut les collègues ! J'ai commencé à apprendre Rust récemment et je confonds constamment les méthodes clone() et to_owned(). Apparemment, les deux créent une copie des données, mais dans la documentation il est écrit que ce sont des choses différentes. En pratique, je vois que clone() peut être appelé sur n'importe quel type qui implémente le trait Clone, tandis que to_owned() seulement sur les types avec le trait ToOwned. Mais n'est-ce pas la même chose ?
Voici un exemple concret qui me perturbe :
```rust
let s: &str = "hello";
let a: String = s.to_owned();
let b: String = s.to_string(); // fonctionne aussi
// Et pourquoi je ne peux pas écrire s.clone() pour obtenir String ?
// Car clone() retourne &str, pas String !
```
Autre exemple : je travaille avec des slices. J'ai un &[i32], et je veux obtenir un Vec. Je peux faire slice.to_owned() — ça marche. Mais si je fais slice.clone(), j'obtiens encore &[i32], pas Vec. Pourquoi ?
Il me semble que to_owned() est une méthode magique qui "transforme" les données empruntées en données possédées. Alors que clone() se contente de copier.