diff --git a/methods.md b/methods.md index 8f2452316ef2e64af51aa10a7f10acfae0af7ed7..28e2491a9f4c16436d0347e08a3cca8a050ca14e 100644 --- a/methods.md +++ b/methods.md @@ -17,7 +17,7 @@ sansfont: Sans Serif - Elles ne sont définies que dans le cadre d'une `Struct` (ou d'un `Enum`{.rust} ou d'un `trait object`{.rust}). - Leur premier paramètre est **toujours** `self`{.rust} qui est une instance de la structure sur laquelle la méthode est appelée. -# Définition d'une méthode +# Définition d'une méthode (`struct`{.rust}) ## Le mot-clé `self`{.rust} (1/2) @@ -86,6 +86,33 @@ fn main() { - Certaines méthodes peuvent ne pas être accessibles à l'utilisateur de l'instance d'une structure (`pub`). - Permet d'éviter de taper le type de `self` dans chaque signature de fonctions. +# Définition d'une méthode (`enum`{.rust}) + +## Généralités + +- Comme pour un `struct`{.rust} on définit une méthode dans un bloc `impl`{.rust}. +- Comme pour un `struct`{.rust} on le premier paramètre d'une méthode est `self`{.rust}. + +## Exemple: Implémentation de `is_some`{.rust} + +<pre><code data-trim="hljs rust"> +enum Option<T> { + None, + Some(T), +} + +impl<T> Option <T> { + // teste si l'option est Some + pub fn is_some(&self) -> bool { + match *self { // on déréférence pour faire le match + Some(_) => true, + None => false, + } + } +} +</code></pre> + + # Fonctions associées ## Généralités