f# - 如何在 F# 中将两个(双选项)相乘

标签 f# monads

我的代码包含相当多的双选项类型;到目前为止,我一直非常成功地使用 Option.map 函数来消除必须在所有地方匹配 Some 和 None 并将它们视为提升类型的需要,但我不确定在以下情况下该怎么做:

let multiplyTwoOptions option1 option2 : double option =
  if not (option1.IsSome && option2.IsSome) then None
  else Some (option1.Value * option2.Value)

我已经 read您不应该以这种方式使用 IsSome,而是使用替代方案(据我所知,按顺序对两者进行模式匹配,似乎很啰嗦)。我对 F# 还是很陌生,所以想知道是否有更惯用的方式?我觉得也许我需要像 Option.fold2 这样的东西来同时处理两个选项,但没有一个。

最佳答案

模式可以嵌套,这就是它们的强大之处。在这种特殊情况下,您可以对元组进行模式匹配:

match option1, option2 with
| Some x, Some y -> Some (x * y)
| _ -> None

关于f# - 如何在 F# 中将两个(双选项)相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39082719/

相关文章:

f# - 如何使用 WebSharper 在服务器上生成 Google Visualizations 数据

F#函数参数

f#: program to calculate difference between dates

scala - 为什么棱镜设置函数不返回选项/也许

f# - F# 中是否有标准选项工作流?

haskell - 将 monad 添加到变压器堆栈的中间

haskell - 什么是索引单子(monad)?

f# - 与 anycpu 相比,针对 x64 有时会导致非常糟糕的性能

Haskell:<- 在 monad 中做符号

c# - 对 IEnumerable<T> 以外的类型(monads?)进行操作的 LINQ 查询表达式——可能的用途?