Ne peuvent pas se déplacer d'emprunt d'un contenu

Je ne comprends pas l'erreur cannot move out of borrowed content. J'ai reçu de nombreuses fois et j'ai toujours résolu, mais je n'ai jamais compris pourquoi.

Par exemple:

for line in self.xslg_file.iter() {
    self.buffer.clear();

    for current_char in line.into_bytes().iter() {
        self.buffer.push(*current_char as char);
    }

    println!("{}", line);
}

produit l'erreur:

error[E0507]: cannot move out of borrowed content
  --> src/main.rs:31:33
   |
31 |             for current_char in line.into_bytes().iter() {
   |                                 ^^^^ cannot move out of borrowed content

Je l'ai résolu par clonage line:

for current_char in line.clone().into_bytes().iter() {

Je ne comprends pas l'erreur, même après avoir lu les autres messages comme:

Quelle est l'origine de ce type d'erreur?

  • Avez-vous regardé des questions de ce genre? (Btw, chaînes offrent la .bytes() méthode.)
  • Oui, j'ai regardé dedans, mais ne comprends pas 🙁 Et mon string est un std::string::String, d'après la documentation, il n'y a pas .octets() la méthode
  • Il est appelé .as_bytes()
  • En fait, merci à vous, il fonctionne avec as_bytes() sans clonage. Mais je ne comprends toujours pas pourquoi ?
  • String obtient le bytes méthode de str.
InformationsquelleAutor Peekmo | 2015-01-26