当前位置:  开发笔记 > 编程语言 > 正文

F#匹配两个值

如何解决《F#匹配两个值》经验,为你挑选了2个好方法。

我对F#很新,我希望将两个值与(match ... with ...)语法进行比较

当我尝试比较两个这样的值时出现问题:

let value1 = 19
let isValue1 y =
    match y with
    | value1 -> y + 1
    | _ -> y

我得到一个警告,即永远不会达到代码的"| _ - > y"部分.为什么是这样?

我知道我可以执行以下操作以使函数按照我希望的方式工作:

let value1 = 19
let isValue1 y =
    match y with
    | _ when y = value1 -> true
    | _ -> false

这也有效

let value1 = 19
let isValue1 y =
    match y with
    | 19 -> true
    | _ -> false

我只是好奇为什么我不能这样做,以及匹配实际上是如何工作的.



1> Noldorin..:

match语句中的value1定义为一个新变量,其值设置为y(作为匹配项).您在上面定义的value1将被忽略,就像您在C#函数中声明一个与类变量同名的局部变量一样.因此,第一个匹配条件将匹配所有内容,而不仅仅是先前定义的value1值,因此错误.希望澄清问题.



2> Brian..:

模式匹配既是控制结构(接下来执行什么代码)又是绑定结构(比如'let',将名称绑定到值).所以,当你这样做

match expr with
| name -> ...

模式("名称")始终匹配,标识符"名称"只是绑定到表达式的值.这就是模式匹配主要用于区分联合(案例类型)的原因,您可以根据结构进行匹配.例如

match someOption with
| Some(x) -> ... // binds x
| None -> ...

match someList with
| h :: t -> ... // binds h and t to head/tail
| [] -> ...

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有