我想知道是否有办法从匹配模式传递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"
答案 0 :(得分:3)
如果你想对一个选项进行模式匹配,只有当它是Some
时才返回它(如果它是None
则执行其他操作),那么你可以使用as
结构在模式匹配中:
let funB x =
match funA x with
| Some _ as optY -> optY
| _ -> failwith "Whatever"
虽然这个函数对我来说看起来不是很有用 - 为什么在检查确保它是Some
时返回值作为选项,否则抛出异常?返回类型为option 'a
,但事实上,您始终只能返回'a
值,因此使用option
没有意义......
你的问题很可能是一个更好的解决方案 - 这取决于你究竟想要做什么。看一下Option
模块中的函数 - 可能会有一些东西可以捕获你需要的东西。