F#匹配语法的澄清
我试图澄清一些对我来说有点模糊的事情:F#匹配语法的澄清,f#,F#,我试图澄清一些对我来说有点模糊的事情: let a, b = true, 3 match a, b with | true, x -> sprintf "true %i" x | false, _ -> "false" 在第一种匹配情况下,匹配true,并将b的值指定给x。 我难以接受的第一个部分是,比较时会读取“true”,但会指定x 但这是否意味着: match a, b with | c, x -> sprintf "true %b %i" c x | false, _
let a, b = true, 3
match a, b with
| true, x -> sprintf "true %i" x
| false, _ -> "false"
在第一种匹配情况下,匹配true,并将b的值指定给x。
我难以接受的第一个部分是,比较时会读取“true”,但会指定x
但这是否意味着:
match a, b with
| c, x -> sprintf "true %b %i" c x
| false, _ -> "false"
是否总是与第一句话相符?您的假设是正确的。在匹配表达式中使用变量类似于使用下划线(在后一种情况下,您不打算使用下划线)。变量始终是100%匹配,因为它只捕获匹配位置中的任何内容 第二个示例将发出警告,最后一行永远不匹配 您的第一个示例也可以这样编写:
let a, b = true, 3
match a with
| true -> sprintf "true %i" b
| false -> "false"
对
匹配表达式始终尝试根据模式匹配值。有许多模式可以匹配。这里有常量模式(在与true
或false
匹配的情况下)和变量模式(在与c,x
匹配的情况下)。如果所比较的值等于常数,则常数模式将匹配-变量模式将匹配任何输入并将输入值分配给变量
将a,b
与模式c,x
进行匹配基本上是将其与任何大小为2的无约束元组进行匹配,同时将a
和b
的值分配给新名称c
和x
。实际上,您拥有的与以下内容相同:
match a, b with
| _, _ -> sprintf "true %b %i" a b