首页 > 解决方案 > 使用“as”模式匹配元组元素

问题描述

我想将具有相同类型的两个元素的元组转换为列表。代码看起来很简单:

let toList (tuple: 'a * 'a): 'a list =
    match tuple with
    | (_ as fst, _ as snd) -> [fst; snd]

但不知何故 type of sndis 'a * 'a,所以似乎不是将元组的第二个元素绑定到一个变量,而是绑定了整个元组。它是编译器中的错误还是我错过了什么?

实际代码更复杂,所以想法不是重写提供的那块,而是要了解as这里的用法有什么问题。我希望它as应该在元组之后将它作为一个整体绑定,就像这样| (_ as fst, _ as snd) as tuple

标签: f#

解决方案


“as”模式的正确句法形式是

拍拍身份_

这将ident定义为等于模式输入,并将模式输入与pat匹配。

对于您的代码,这意味着

let toList (tuple: 'a * 'a): 'a list =
    match tuple with
    | (fst, snd) -> [fst; snd]

(fst, snd)元组模式在哪里。

有关“as”模式的完整详细信息,请参阅F# 语言规范第 7.3 节。


推荐阅读