我有以下代码:
let f g x = if x < 0 then None else Some(g x)
随着
f
g
函数可能会也可能不会返回 Option
以及。自 f
将其设为通用并且没有任何通用约束我最终可以拥有 Some(Some(z))
其结果。如果事实上我想要的只是 None
或 Some(z)
.如何避免双重包装(最好不要对 g
施加限制)?
最佳答案
> let f g x = if x < 0 then None else Some(g x)
val f : g:(int -> 'a) -> x:int -> 'a option
f
返回 'a option
这意味着它可以返回 Some z
或 Some (Some y)
等f
可以返回带有任意数量嵌套 Some
的结果s 取决于 关于 g
的类型.如果我答对了这个问题,那就是关于折叠嵌套的函数
Some
s。它可以手动编写:let collapseOptions x =
match x with
| Some (Some y) -> y
| _ -> None
如果这个问题是关于折叠所有嵌套的函数
Some
s,我想看看它的签名:)
关于f# - 如何避免在 F# 中双重包装到 Some,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062760/