函数[x] - >如何工作

ege*_*ard 4 f#

当我遇到这行代码时,我正在浏览FSharp.Data的源代码

let (|Singleton|) = function [l] -> l | _ -> failwith "Parameter mismatch"
Run Code Online (Sandbox Code Playgroud)

function [l]是我不明白的.更具体地说,我不明白[l]参数是如何工作的.

通过在FSI中进行实验,我可以确定它开始一种类似于的模式匹配形式match [l] with ....但是,我无法弄清楚F#编译器如何解释表达式.

我想知道的是它实际上是如何工作的以及它遵循的规则.

Lee*_*Lee 9

它相当于

let (|Singleton|) lst =
    match lst with
    | [l] -> l
    | _ -> failwith "Parameter mismatch"
Run Code Online (Sandbox Code Playgroud)

所以它从单个元素列表中提取元素,或者如果列表具有任何其他数量的元素则抛出异常.