给出以下活动模式:
let (| HasMatch |) (x:string) =
if x.Contains("0") then Some()
else None;;
以下模式匹配func:
let testFn x = function
| HasMatch i -> printfn "%A" i
| _ -> printf "nope";;
最后一行的通配符模式显示为warning FS0026: This rule will never be matched
我看到的所有示例似乎都推断出部分活动模式必须返回Some('a)
才能匹配,返回None
的模式会被通配符捕获。错误似乎有所不同。
我缺少什么?
答案 0 :(得分:3)
我认为您应该将None
案例添加到活动模式声明中,如下所示:
let (| HasMatch | _ |) (x:string) =
if x.Contains("0") then Some()
else None;;
在您的原始示例中,编译器会推断您确实要返回Option
类型。当您在示例中运行printf
时,如果匹配,您会看到它打印Some Null
。
另外,返回Some()
是不好的,你应该回复说Some(x)
或类似的