当前位置:  开发笔记 > 编程语言 > 正文

f#区别联合通用

如何解决《f#区别联合通用》经验,为你挑选了1个好方法。

通用TryValue类型的语法是什么,它可以返回值'a或'b'的错误?

type TryValue =
    | Value of 'a
    | Error of 'b

如果错误是一个字符串,那么它没关系:

type 'a TryValue =
    | Value of 'a
    | Error of string

我想定义一个tryRun函数,它接受一个错误创建器,一个函数和一个参数,它将尝试使用参数运行该函数,并且在任何错误上使用错误创建器函数来创建错误:

let tryRun createErrorFn param fn =
    try 
        Value (fn param)
    with
        | ex  -> Error (createErrorFn ex.Message param)

以及tryRun包装的任何函数的包装器:

let wrapTryRun createErrorFn fn param =
    match param with
    | Value a -> tryRun createErrorFn a fn
    | Error e -> Error e

现在我可以运行一个函数列表(伪代码,还没有完全解决这个问题):

let createErrorFn errorMessage param =
    URLProcessignError {url=param.url;errorMessage=errorMessage}
[fn1;fn2] |> List.fold (fun acc fn -> (wrapTryRun createErrorFn fn acc))

Gus.. 5

您缺少左侧的通用参数:

type TryValue<'a,'b> =
    | Value of 'a
    | Error of 'b

当它只有一个参数时,您可以像使用字符串一样使用ML样式,但如果您有多个参数,则应使用带有< >尖括号的.NET表示法.



1> Gus..:

您缺少左侧的通用参数:

type TryValue<'a,'b> =
    | Value of 'a
    | Error of 'b

当它只有一个参数时,您可以像使用字符串一样使用ML样式,但如果您有多个参数,则应使用带有< >尖括号的.NET表示法.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有