首先,我是f#的新手,所以答案很明显,但我没有看到。所以我有一些带有id和值的元组。我知道我正在寻找的id,我想从我传入的三个中选择正确的元组。我打算用两个匹配语句来完成这个,一个嵌套在另一个中,但是每个事情与第一条规则相匹配。在这个例子中,我把它切成两个元组,因为这显示了我的问题。编译器给出一个永远不会匹配的"规则"警告,但我不明白为什么。
let selectTuple tupleId tuple1 tuple2 =
match tuple1 with
| (tupleId, _) -> tuple1
| _ -> tuple2
任何有关更好方法的帮助或建议都将非常感激。
答案 0 :(得分:6)
使用when
子句:
let selectTuple tupleId tuple1 tuple2 =
match tuple1 with
| (x, _) when x = tupleId -> tuple1
| _ -> tuple2
这里发生的事情是,当您使用tupleId
作为匹配大小写的一部分时,您会引入一个名为tupleId
的新值,您可以在匹配大小写的右侧引用该值。这会影响您的函数参数。
因为你实际上只给元组的第一个元素命名,所以任何元组都会匹配第一个元素,这就是你在第二个案例中得到'规则将不匹配'的警告。