Import d'un module en Rust

a marqué ce sujet comme résolu.

Bonjour,

En train d’apprendre le langage Rust, il y a un détail que je ne comprend pas concernant l’import de module. Prenons le code suivant (tiré de la documentation du trait rand::Rng) :

use rand::{thread_rng, Rng};

let mut rng = thread_rng();
let x: u32 = rng.gen();
println!("{}", x);
println!("{:?}", rng.gen::<(f64, bool)>());

Qu’est ce que thread_rng et Rng ? Des fonctions ? Des namespaces ? Parce que thread_rng on l’utilise comme une fonction, ça je n’ai aucun souci, je l’importe donc elle est disponible dans mon espace de nom. Mais lorsque j’importe Rng, j’ai des fonctions qui sont incluses à mon espace de nom comme gen() ou gen_range(). Pourtant que je n’ai pas utilisé la syntaxe Rng::* qui m’aurait semblé plus logique. C’est sûrement dû au fait qu'Rng soit un trait (et que je ne sais pas encore ce que c’est). Il se passe quoi si j’ai déjà utilisé le label gen() dans mon projet ? Je ne peux pas utiliser le module rand ?

Merci pour votre aide et bonne journée.

Salut,

rand::Rng est un trait comme indiqué par la documentation. Un trait est en gros une interface. Lorsqu’un type implémente un trait, il implémente les fonctions que cette interface requiert. Lorsque tu importes un trait, tu rends les fonctions de cette interface accessibles sur les types qui implémentent ce trait.

Si tu définis une fonction gen toi même, ce n’est pas du tout un problème. Tu peux parfaitement avoir deux traits avec une fonction en commun. Dans ce cas, il faudra simplement signaler au compilateur laquelle tu souhaites utiliser lorsqu’il y a ambiguïté (et si tu ne le fais pas, le compilateur va te le demander explicitement).

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte