语句,因此工作流本身将评估为 true。如果没有任何 if-6ren">
gpt4 book ai didi

F# "exit early"计算表达式?

转载 作者:行者123 更新时间:2023-12-02 08:19:47 28 4
gpt4 key购买 nike

在尝试了解有关计算表达式如何工作的更多信息时,我尝试编写一个构建器,该构建器在评估 ifthen block 后跳过表达式的其余部分> 语句,因此工作流本身将评估为 true。如果没有任何 if 语句评估为 true,则工作流应返回 false

例如:

let mutable x = 0

let result =
earlyExit {
if false then x <- 99
if true then x <- 33
if true then x <- 11
}

这里,result应该是truex应该是33

我得到的最接近的是:

type EarlyExitBuilder () =
member this.Combine (a, b) = a || b ()
member this.Delay fn = fn
member this.Run fn = fn ()
member this.Zero () = false

... 这导致工作流评估为 falsex11

使用我示例中的语法是否可行?

最佳答案

能够为您提供所需行为的最小更改可能是将 return 添加到计算中 - return 构造可以返回 true 并提前终止评估:

let mutable x = 0

let result =
earlyExit {
if false then return x <- 99
if true then return x <- 33
if true then return x <- 11
}

此计算结果为 truex 的值将为 33。计算构建器与您的相同,额外的 Return 成员返回 true:

type EarlyExitBuilder () =
member this.Combine (a, b) = a || b ()
member this.Delay fn = fn
member this.Run fn = fn ()
member this.Zero () = false
member this.Return( () ) = true

正如其中一个引用答案中提到的,这与我的 imperative computation builder 有点相关。这让你可以使用命令式的 returnextended version with break and continue .

关于F# "exit early"计算表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38340711/

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