gpt4 book ai didi

F# - 我可以从函数返回一个可区分的联合吗

转载 作者:行者123 更新时间:2023-12-04 01:22:49 26 4
gpt4 key购买 nike

我有以下类型:

type GoodResource = {
Id:int;
Field1:string }


type ErrorResource = {
StatusCode:int;
Description:string }

我有以下歧视工会:
type ProcessingResult = 
| Good of GoodResource
| Error of ErrorResource

然后想要一个函数,该函数将具有可区分联合 ProcessingResult 的返回类型:
let SampleProcessingFunction value =
match value with
| "GoodScenario" -> { Id = 123; Field1 = "field1data" }
| _ -> { StatusCode = 456; Description = "desc" }

我正在尝试做的事情是可能的。编译器发出声明它希望 GoodResource 作为返回类型。我错过了什么还是我完全以错误的方式解决这个问题?

最佳答案

就目前而言,SampleProcessingFunction 为每个分支返回两种不同的类型。

要返回相同的类型,您需要创建一个 DU(您所做的),但还要明确指定 DU 的大小写,如下所示:

let SampleProcessingFunction value =
match value with
| "GoodScenario" -> Good { Id = 123; Field1 = "field1data" }
| _ -> Error { StatusCode = 456; Description = "desc" }

您可能会问“为什么编译器不能自动找出正确的大小写”,但是如果您的 DU 有两个相同类型的案例会发生什么?例如:
type GoodOrError = 
| Good of string
| Error of string

在下面的示例中,编译器无法确定您指的是哪种情况:
let ReturnGoodOrError value =
match value with
| "GoodScenario" -> "Goodness"
| _ -> "Badness"

因此,您再次需要为您想要的情况使用构造函数:
let ReturnGoodOrError value =
match value with
| "GoodScenario" -> Good "Goodness"
| _ -> Error "Badness"

关于F# - 我可以从函数返回一个可区分的联合吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29801418/

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