对F#选项类型执行计算

use*_*285 3 f# options

我正在尝试通过返回双选项而不是双精度来编写一些处理错误的函数.其中许多函数互相调用,因此将双选项作为输入来输出其他双选项.问题是,我不能用双选项做什么,我可以用双打做 - 简单的事就是用'+'添加它们.

例如,一个除以两个双精度数的函数,并返回一个带有none的双选项,用于除以零错误.然后另一个函数调用第一个函数并为其添加另一个double选项.

请告诉我是否有办法做到这一点,或者我是否完全误解了F#选项类型的含义.

Lee*_*Lee 10

这称为提升 - 您可以编写函数以通过两个选项提升另一个函数:

let liftOpt f o1 o2 = 
        match (o1, o2) with
        | (Some(v1), Some(v2)) -> Some(f v1 v2)
        | _ -> None
Run Code Online (Sandbox Code Playgroud)

那么你可以提供应用的功能,例如:

let inline addOpt o1 o2 = liftOpt (+) o1 o2
Run Code Online (Sandbox Code Playgroud)

  • 实际上,您甚至可以更进一步使代码更具可读性:按照此处的方式定义 liftOpt,然后(*非常非常本地*)使用类似 `let (+) o1 o2 = liftOpt( +) o1 o2`。现在你可以写“let x, y = Some 3.0, Some 2.0”,然后写“x + y”。 (2认同)