gpt4 book ai didi

f# - F# 函数的多个退出

转载 作者:行者123 更新时间:2023-12-04 00:29:42 25 4
gpt4 key购买 nike

我可以在 C++ 中轻松做到这一点(注意:我没有测试它的正确性——这只是为了说明我想要做什么):

   const int BadParam = -1;
const int Success = 0;

int MyFunc(int param)
{
if(param < 0)
{
return BadParam;
}

//normal processing

return Success;
}

但是我不知道如何在 F# 早期退出例程。我想要做的是在输入错误时退出函数,但如果输入正常则继续。我是不是遗漏了 F# 的一些基本属性,还是因为我只是在学习 FP,所以我以错误的方式解决了这个问题?
失败是我唯一的选择吗?

这是我到目前为止所得到的并且编译正常:
   #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;;

是否有处理此类事情的 FP 方式?

最佳答案

在我看来,匹配表达式是早期退出的 F# 类似物,用于调用错误条件并单独处理它们。对于你的例子,我会写:

 [<EntryPoint>]
let main (args:string[]) =
printfn "args.Length is %d" args.Length
match args with
| [| searchstring; filespace |] ->
// much code here ...
int Success
| _ -> printfn "Two arguments must be passed"
int WrongNumberOfArgumentsPassed

这很好地分离了错误情况。一般来说,如果你需要从某事中间退出,拆分函数,然后将错误案例放入 match .对于函数式语言中的小函数应该有多大,真的没有限制。

顺便说一句,您使用可区分联合作为整数常量集有点奇怪。如果您喜欢这种习惯用法,请注意在引用它们时不需要包含类型名称。

关于f# - F# 函数的多个退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1609851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com