如何在F#中命名返回类型?

3

使用以下函数:

let Calc =
    // do something
    if something
        (false, 0)
    else
        (true, some value)

如何定义并命名输出字段?

在C#中,我可以这样做:

(bool Success, int Value) Calc()....

那么当我获得结果后,我可以通过名称访问成功和值字段。在F#中,我该如何做到这一点?

1个回答

8

你可以通过绑定字段来为元组中的字段命名,如下所示:

let Calc () =
    // do something
    if something
        (false, 0)
    else
        (true, some value)

let (success, value) = Calc ()

在定义Calc时,您无需为元组字段命名,可以在使用Calc的地方进行命名。如果您希望给结果命名,请考虑创建记录类型来包含它:


type CalcData = { success: bool; value: int }

let Calc () = 
  if something then { success = false; value = 0 }
  else { success = true, value = 123 }

let {success = success; value = value} = Calc ()

但是看起来你的Calc可能会返回空值或一些结果,这正是Option类型的用途:


let calc () = if something then None else Some 123

match calc () with
| None -> // if calc returned no value then do ....
| Some value -> // if calc returned a value then do ...

1
看起来我需要学习记录类型!刚开始学F#,谢谢! - Thomas
1
你有很多乐趣在前方,@Thomas(双关语)。 从Chesters的回答中需要注意的一点是,按照惯例,F#函数应该使用小写/驼峰命名法。此外,“something”可能应该作为参数,这将使calc成为一个纯函数。 - Guran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接