我的代码包含很多双选项类型。到目前为止,我已经非常成功地使用了Option.map函数,从而消除了必须在所有位置上“某些”和“无”进行匹配并将它们视为提升类型的需要,但是不确定在以下情况下该怎么做:

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

10-06 09:37