结果的最终输出,单位为F#
这似乎是一个答案极其简单的问题,但我想不起来: 在结果中是否有一个内置方法用于:结果的最终输出,单位为F#,f#,F#,这似乎是一个答案极其简单的问题,但我想不起来: 在结果中是否有一个内置方法用于: let (a: Result<'a, 'a>) = ... match a with | Ok x -> x | Error e -> e let(a:Result)=。。。 匹配 |确定x->x |错误e->e 否,因为此函数要求确定类型和错误类型相同,这使得结果不那么一般。否,没有任何函数允许您这样做。但你可以很容易地定义它: [] 模块结果= 让连接(值:结果)= 匹配值 |O
let (a: Result<'a, 'a>) = ...
match a with
| Ok x -> x
| Error e -> e
let(a:Result)=。。。
匹配
|确定x->x
|错误e->e
否,因为此函数要求确定
类型和错误
类型相同,这使得结果
不那么一般。否,没有任何函数允许您这样做。但你可以很容易地定义它:
[]
模块结果=
让连接(值:结果)=
匹配值
|Ok v->v
|错误e->e
让我们来看看结果=
如果System.String.IsNullOrEmpty s,则
错误s
其他的
好的
让我们=
getResult“asd”
|>Result.join
|>打印fn“%s”
它不会使Result
不那么通用(正如@brianberns所说),因为它不是实例成员。的存在不会使任务
变得不那么一般
更新
在对FSharpPlus和FSharpx.Extras进行了更仔细的搜索之后,我找到了必要的函数。它是签名('a->'c)->('b->'c)->Result->c
,而不是Result->'a
,在两个库(和)中都称为Result。因此,为了获得值,我们可以将id
作为两个参数传递:
#r“nuget:FSharpPlus”
开放式FSharpPlus
//或
#r“nuget:FSharpx.Extras”
开放式FSX
getResult“asd”
|>Result.id或id
|>打印fn“%s”
另外,定义快捷方式并将其命名为Result.join
或Result.from也可能有用,因为Haskell中的不是我所知道的,但这似乎不是经常有用的。您是否有这样一个示例,说明这何时会有所帮助?是的,例如,对于Suave Web服务器:无论是成功响应还是错误,所有对象都是同一个对象。因此,我可以用一个计算表达式定义一系列相互关联的事件,最后,我收集一个作为结果的对象,或者显示错误的同一个对象。但是将result作为中间类型允许我使用表达式而不是一堆嵌套的if。对不起,我不是想暗示它对结果有某种全局影响。我的意思是,它不是标准的Result
模块的一部分,因为它只在类型相同的情况下工作。这与我在问题中发布的相同,我只是想知道是否有一个实用程序函数已经为这样的模块构建case@Thomas,我在第三方库中找到了此函数,请检查更新的答案