如何在F#中为可选参数使用Value Option?
F#中为可选参数使用Value Option的方法
你定义了带可选参数的静态方法,尝试用defaultValueArg替代defaultArg时遇到以下类型错误:
error FS0001: This expression was expected to have type
''a voption'
but here has type
'int option'
错误原因
F#的可选参数(?param语法)默认生成的是普通引用类型的option,而defaultValueArg是专门为**值类型的Option(Value Option,即voption)**设计的函数,两者类型不兼容,因此触发报错。
解决方案
方案1:将普通Option转为Value Option
先把可选参数生成的option转换为voption,再使用defaultValueArg:
open System type Random with static member Sequence(?seed : int) = let seed = seed |> Option.toValueOption |> defaultValueArg 0 seq { let r = new Random(seed) while true do yield r.Next() }
方案2:显式定义可选参数为Value Option类型
直接将可选参数的类型指定为voption,这样可以直接使用defaultValueArg,调用时依然支持可选参数语法:
open System type Random with static member Sequence(?seed : int voption) = let seed = defaultValueArg seed 0 seq { let r = new Random(seed) while true do yield r.Next() }
内容的提问来源于stack exchange,提问作者sdgfsdh
相关产品推荐
相关产品推荐

