Un petit bonus sur le returncomme fonction identité, les exceptions et les pointeurs. En fait, on peut bien trouver des return en OCaml, quand on quitte ce que l'on appelle la monade identité. Ce qui peut être le cas quand on travail avec des pointeurs à la places d'exceptions.
La fonction int_of_string_opt a pour type string -> int option. Ce qui veut dire qu'elle prend une chaîne de caractères pour la convertir en int. Par contre, si c'est pas possible, au lieu de lever une exception, elle retourner l'équivalent OCaml d'un pointeur sur int (qui est le pointeur nul en cas d'échec). Et bien, on peut travailler avec ces pointeurs comme si c'était des int. Le tout c'est de lui dire comment si prendre pour travail avec un fonction qui attend un a et retourne un pointeur sur b, comment on s'y prend pour lier une valeur à une variable quand on travaille avec des pointeurs.
letbindxf=matchxwithSomev->fv|None->None
Si j'ai un pointeur valide je passe la valeur pointée à f, sinon je retourne toujours le pointeur nul.
Ensuite, il faut dire comment on obtient un pointeur à partir d'un valeur donnée :
[^] # Re: goto return cave
Posté par kantien . En réponse au journal Is return the new goto ?. Évalué à 4.
Un petit bonus sur le
returncomme fonction identité, les exceptions et les pointeurs. En fait, on peut bien trouver desreturnen OCaml, quand on quitte ce que l'on appelle la monade identité. Ce qui peut être le cas quand on travail avec des pointeurs à la places d'exceptions.La fonction
int_of_string_opta pour typestring -> int option. Ce qui veut dire qu'elle prend une chaîne de caractères pour la convertir enint. Par contre, si c'est pas possible, au lieu de lever une exception, elle retourner l'équivalent OCaml d'un pointeur surint(qui est le pointeur nul en cas d'échec). Et bien, on peut travailler avec ces pointeurs comme si c'était desint. Le tout c'est de lui dire comment si prendre pour travail avec un fonction qui attend unaet retourne un pointeur surb, comment on s'y prend pour lier une valeur à une variable quand on travaille avec des pointeurs.Si j'ai un pointeur valide je passe la valeur pointée à
f, sinon je retourne toujours le pointeur nul.Ensuite, il faut dire comment on obtient un pointeur à partir d'un valeur donnée :
Enfin on peut écrire le code suivant :
Fonction qui s'utilise ainsi :
C'est ainsi que les exceptions sont gérées en Rust via la monade d'erreurs. :-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.