我可以在没有警告的情况下解压缩F#列表吗?

Sol*_*lma 3 f# list pattern-matching

F#可以轻松解压元组.解包列表也是可行的,但编译器会发出警告:

let m = [1; 2; 3]
let [a; b; c] = m
// Incomplete pattern matches on this expression. For example, the value '[_;_;_;_]' may indicate a case not covered by the pattern(s)
Run Code Online (Sandbox Code Playgroud)

有没有办法避免这种警告?

Mat*_*asd 5

您可以使用#nowarn指令(在您的情况下#nowarn "25")禁用每个文件的警告,也可以在命令行上禁用警告--nowarn.

有关详细信息,请查看F#编译器指令.

首次禁用时,目前无法再次重新启用警告.

如果无法解压缩元素的数量,您的匹配可能(意外地)导致运行时错误[a;b;c],因此您可以使用明确关于risc的完全匹配:

let m = [1;2;3]
let (a,b,c) =
    match m with
    | [a;b;c] -> (a,b,c)
    | _ -> failwith "Expected exactly three items in m"
Run Code Online (Sandbox Code Playgroud)