f# - 使用“as”模式匹配元组元素
问题描述
我想将具有相同类型的两个元素的元组转换为列表。代码看起来很简单:
let toList (tuple: 'a * 'a): 'a list =
match tuple with
| (_ as fst, _ as snd) -> [fst; snd]
但不知何故 type of snd
is 'a * 'a
,所以似乎不是将元组的第二个元素绑定到一个变量,而是绑定了整个元组。它是编译器中的错误还是我错过了什么?
实际代码更复杂,所以想法不是重写提供的那块,而是要了解as
这里的用法有什么问题。我希望它as
应该在元组之后将它作为一个整体绑定,就像这样| (_ as fst, _ as snd) as tuple
解决方案
“as”模式的正确句法形式是
拍拍身份_
这将ident定义为等于模式输入,并将模式输入与pat匹配。
对于您的代码,这意味着
let toList (tuple: 'a * 'a): 'a list =
match tuple with
| (fst, snd) -> [fst; snd]
(fst, snd)
元组模式在哪里。
有关“as”模式的完整详细信息,请参阅F# 语言规范第 7.3 节。
推荐阅读
- python-3.x - Groupby 在 pandas 数据框中按季度确定日期并查找它们的出现次数
- spring - 春季启动 liquibase。在实体和数据库之间执行 DIFF
- vue.js - 路径在本地主机上工作,但在生产服务器上不工作 [vue.js]
- sql - 为什么这个 SUM() 字段没有按预期工作?
- google-cloud-storage - 使用 gsutil 命令将维度添加到估计销售报告
- java - 一个 POJO,但 XmlRootElement 名称不同
- python - 大型 SQL 文件到 CSV 文件
- javascript - addEventListener 函数中的数据没有显示在 IE 中,因为它在 Chrome 中工作正常
- java - 面临创建 x-path 的困难
- cytoscape.js - Cytoscape.js 和 cose-bilkent:防止节点和边缘重叠的最佳参数