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