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 № 1Nous 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).