-6ren">
gpt4 book ai didi

f# - 如何在没有可变变量的情况下在 F# 中编写 "retry"逻辑(仅进行 1 次迭代)?

转载 作者:行者123 更新时间:2023-12-02 01:21:16 26 4
gpt4 key购买 nike

因此,通过尝试避免可变变量,我想出了以下重试逻辑代码,这看起来很难看:

let result = TryConnect()
match result with
| ErrorConnecting ->
SetupConnectionParameters()
let resultAgain = TryConnect()
match resultAgain with
| ErrorConnecting ->
Console.Error.WriteLine("Setup failed!")
Environment.Exit(7)
| Success(value) -> PerformOperations(value)
| Success(value) -> PerformOperations(value)

有没有办法减少这里的重复? (记住,没有 mutable 变量。)谢谢!

最佳答案

由于此处显示了很多替代方案,因此这里是另一个:

let private tryConnectNth n = 
if n <> 0 then SetupConnectionParameters()
TryConnect()

let isSuccess = function
|Success _ -> true
|ErrorConnecting -> false

let tryConnect n =
Seq.init n tryConnectNth // generate a sequence of n connection attempts
|> Seq.tryFind isSuccess // try to find the first success - returns Option
|> Option.fold (fun _ -> id) ErrorConnecting // return ErrorConnecting if None, or result otherwise

它仅在非零连接尝试时调用 SetupConnectionParameters() 并最多重复 n 次。

关于f# - 如何在没有可变变量的情况下在 F# 中编写 "retry"逻辑(仅进行 1 次迭代)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38455592/

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