F# 匹配两个值

标签 f# pattern-matching

我对 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 是如何工作的。

最佳答案

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

关于F# 匹配两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/480769/

相关文章:

f# - 模式匹配,F# 与 Erlang

types - 如何使函数在fsharp中返回真正不同的类型?

c++ - 使用 openCV 裁剪图像

python - 正则表达式精确匹配

parsing - 如何解决 FParsec 错误 "The combinator ' much' 已应用于解析器,该解析器无需消耗即可成功......”

sql - 如何查询非 A-Z 条目?

scala - Scala 3/Dotty 中的依赖元组

f# - 如何在每个元素的 x 轴上显示标签?

f# - Java 下划线在 F# 中等效吗?

silverlight - F# 和 Silverlight 5 : out-of-browser with elevated trust?