J'ai un problème lors du retour des valeurs dans des fonctions complexes. Les exemples sont toujours meilleurs:
Considérez la fonction suivante: P>
let myf (mypar: int) = if mypar = 2 then () (* No error *) mypar + 1
3 Réponses :
Avez-vous essayé d'utiliser un sinon code> à la place?
let myf (mypar: int) =
if mypar = 2 then
4
else
mypar + 1
Qu'est-ce que le paquet correspondant? Vous voulez dire correspondance de modèle?
@NyinitHann: Absolument - c'est ce que je reçois pour poster juste comme je quitte le travail :)
f # n'a pas de déclaration de retour. Le seul moyen de faire ce que vous voulez ici, de choisir un bloc ou l'autre, est avec si code> ..
ele code>:
Oui, cela fonctionne, mais mon problème, de manière générale, c'est que, également à imbriquée, tandis que je ne peux pas retourner ... Devrais-je utiliser des flux de travail ?????
Non, vous devriez plutôt écrire votre boucle comme une fonction récursive.
Pour ajouter d'autres détails, le problème avec votre approche est que tout dans F # est une expression em>. Cela rend beaucoup plus facile de raisonner sur vos programmes (car vous n'avez pas besoin de garder une trace de l'énoncé exécutant actuellement em>), mais cela signifie que vous devez toujours écrire une expression complète. Si vous essayez d'écrire quelque chose comme retour code>, ce serait comme si vous écrivez ce qui suit en C # (cela explique probablement pourquoi F # ne permet pas ce genre de choses): P>
if something then ()
else () // implicitly added by the compiler
Post associé - Sorties multiples de la fonction F #