我对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
我很好奇为什么我不能做到这一点,以及匹配如何真正起作用。
最佳答案
match 语句中的 value1 被定义为一个新变量,其值设置为 y(作为匹配项)。您刚刚定义的 value1 被忽略,就像您在 C# 函数中声明一个与类变量同名的局部变量一样。因此,第一个匹配条件将匹配所有内容,而不仅仅是先前定义的 value1 值,因此会出现错误。希望能澄清问题。
关于F# 匹配两个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/480769/