通过简单的F#模式匹配转换,是否有可能在没有警告的情况下忽略不匹配的值?

Pho*_*bis 3 f# transformation pattern-matching

所以,我之前问过这个问题:

在这个具体的例子中,有人可以帮我比较使用F#over C#(IP地址表达式)吗?

我正在查看已发布的代码,我想知道是否可以编写此代码而不会产生警告:

let [|a;b;c;d|] = s.Split [|'.'|]
IP(parseOrParts a, parseOrParts b, parseOrParts c, parseOrParts d)
Run Code Online (Sandbox Code Playgroud)

是否有可能为匹配_模式做一些事情而忽略?没有添加像Active Patterns这样的东西?我想保持代码尽可能简单...我可以这样做而不会大幅改变这段代码吗?

注意:警告如下

警告不完整模式匹配此表达式.例如,值'[| _; _; _; _; _ |]'可能表示模式未涵盖的情况.

Nat*_*ers 5

你可以试试

#nowarn "25"
Run Code Online (Sandbox Code Playgroud)

在部分功能之前.

但是当然你正在禁用警告,我认为这会将整个文件关闭.我记得看到一种方法只禁用部分文件的警告,但我现在找不到它.

还有编译器选项--nowarn:25,但这更糟糕,因为它适用于整个项目.


要做正确的方法,你需要用三个替换你的两行:

match Array.map parseOrParts (s.Split [|'.'|]) with
| [|a;b;c;d|] -> IP(a,b,c,d)
| _ -> failwith "Oh no!"   // preferably, your exception of choice goes here.
Run Code Online (Sandbox Code Playgroud)