que podría hacer esto fácilmente en C++ (nota: No he probado esto para la corrección - que es sólo para ilustrar lo que estoy tratando de hacer):múltiples salidas de F # Función
const int BadParam = -1;
const int Success = 0;
int MyFunc(int param)
{
if(param < 0)
{
return BadParam;
}
//normal processing
return Success;
}
Pero no puede entender cómo salir de una rutina temprano en F #. Lo que quiero hacer es salir de la función en una entrada incorrecta pero continuar si la entrada es correcta. ¿Me estoy perdiendo alguna propiedad fundamental de F # o estoy abordando el problema de forma incorrecta ya que estoy aprendiendo FP? ¿Es failwith mi única opción aquí?
Esto es lo que tengo hasta ahora y compila bien:
#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;;
¿Hay una manera de FP de tratar con este tipo de cosas?
Es probable que desee algún tipo de continuación de escape, pero no tengo idea de cómo sería en F #. – leppie
http://stackoverflow.com/questions/833180/handy-f-snippets/1475822#1475822 – Benjol
@Benjol, gracias - exactamente el tipo de cosa que estaba buscando. –