1

我想知道是否有一种方法可以从匹配模式中传递一个 Option 值而不重新创建它?

var funA x = Some(x)
var funB x = 
   match funA x with
   | Option(y) -> Option(y) // <---- Recreating the Option value. Can I return the very same one?
   | _ -> failwith "Whatever"
4

1 回答 1

3

如果您想对一个选项进行模式匹配并仅在它存在时才返回它Some(如果是,则执行其他操作None),那么您可以as在模式匹配中使用该构造:

let funB x = 
  match funA x with
  | Some _ as optY -> optY
  | _ -> failwith "Whatever"

虽然这个函数对我来说看起来不是很有用 - 为什么在检查以确保它是Some并且抛出异常时将值作为选项返回?返回类型是option 'a,但事实上,你总是可以只返回'a值,所以使用option...

很可能有更好的解决方案来解决您的问题 - 这取决于您到底想要做什么。查看Option模块中的功能 - 可能有一些东西可以满足您的需求。

于 2013-09-08T04:58:39.470 回答