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