/ / Tous les types primitifs implémentent-ils le trait Copy? - rouille

Tous les types primitifs implémentent-ils le trait Copier? - rouille

Faire tout types primitifs à Rust mettre en œuvre le Copy trait?

Il serait intéressant de savoir, car de telles connaissances font certainement partie d'un apprentissage approfondi d'un nouveau langage de programmation.

Réponses:

9 pour la réponse № 1

Nous pouvons utiliser le compilateur pour prouver que quelque chose implémente Copy. En utilisant la liste des primitives de Le langage de programmation Rust:

fn a_function() {}

fn is_copy<T>(_val: T) where T: Copy {}

fn main() {
is_copy(true); // boolean
is_copy("c"); // char
is_copy(42i8);
is_copy(42i16);
is_copy(42i32);
is_copy(42i64);
is_copy(42u8);
is_copy(42u16);
is_copy(42u32);
is_copy(42u64);
is_copy(42isize);
is_copy(42usize);
is_copy(42f32);
is_copy(42f64);
is_copy("hello"); // string slices
is_copy(a_function); // function pointers
}

Il existe trois types non couverts ici:

  • Tuples
  • Tableaux
  • Les tranches

C’est parce que ces types peuvent contenir plusieurs types; ils sont paramétrés sur un générique. Ils ne sont que Copy si toutes les valeurs contenues sont Copy:

// OK
is_copy([42]);
is_copy((42, 42));
is_copy(&[42][..]);
// Not OK
is_copy([Vec::new()]);
is_copy((Vec::new(), Vec::new()));
is_copy(&[Vec::new()][..]);

Et comme toujours, le la documentation d'un trait répertorie tout ce qui met en œuvre ce trait. (Sauf quand il y a bugs dans la documentation).