如何传递Option值?

时间:2013-09-08 04:43:13

标签: f#

我想知道是否有办法从匹配模式传递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"

1 个答案:

答案 0 :(得分:3)

如果你想对一个选项进行模式匹配,只有当它是Some时才返回它(如果它是None则执行其他操作),那么你可以使用as结构在模式匹配中:

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

虽然这个函数对我来说看起来不是很有用 - 为什么在检查确保它是Some时返回值作为选项,否则抛出异常?返回类型为option 'a,但事实上,您始终只能返回'a值,因此使用option没有意义......

你的问题很可能是一个更好的解决方案 - 这取决于你究竟想要做什么。看一下Option模块中的函数 - 可能会有一些东西可以捕获你需要的东西。