ich dies leicht in C tun könnte ++ (Anmerkung: Ich habe das nicht für Richtigkeit prüfen - es ist nur zu veranschaulichen, was ich versuche zu tun):Mehrere Exits Von F # Funktion
const int BadParam = -1;
const int Success = 0;
int MyFunc(int param)
{
if(param < 0)
{
return BadParam;
}
//normal processing
return Success;
}
Aber ich kann nicht herausfinden, wie man eine Routine in F # vorzeitig beendet. Was ich tun möchte, ist die Funktion bei einer schlechten Eingabe zu verlassen, aber weiter, wenn die Eingabe in Ordnung ist. Fehle ich eine fundamentale Eigenschaft von F # oder gehe ich das Problem auf die falsche Art an, da ich gerade FP lerne? Ist ein failwith meine einzige Option hier?
Das ist, was ich so weit gekommen und es kompiliert ok:
#light
module test1
(* Define how many arguments we're expecting *)
let maxArgs = 2;;
(* The indices of the various arguments on the command line *)
type ProgArguments =
| SearchString = 0
| FileSpec = 1;;
(* Various errorlevels which the app can return and what they indicate *)
type ProgReturn =
| Success = 0
| WrongNumberOfArgumentsPassed = 1;;
[<EntryPoint>]
let main (args:string[]) =
printfn "args.Length is %d" args.Length
let ProgExitCode = if args.Length <> maxArgs then
printfn "Two arguments must be passed"
int ProgReturn.WrongNumberOfArgumentsPassed
(* Want to exit "main" here but how? *)
else
int ProgReturn.Success
let searchstring, filespec = args.[int ProgArguments.SearchString],args.[int ProgArguments.FileSpec];
printfn "searchstring is %s" searchstring
printfn "filespec is %s" filespec
ProgExitCode;;
Gibt es eine FP Art und Weise mit dieser Art der Sache umzugehen?
Sie wollen wahrscheinlich eine Art Fluchtfortsetzung, aber ich habe keine Ahnung, wie es in F # wäre. – leppie
http://stackoverflow.com/questions/833180/handy-f-snippets/1475822#1475822 – Benjol
@Benjol, danke - genau die Art von was ich suchte. –