我对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/

10-13 06:37