ReasonML记录模式匹配的正确方法

问题描述

我有一个记录类型,

type person = {
 name: string,gender: string,age: int
}

,并且有许多适合该类型的记录。我想做的只是从此人中提取[姓名,年龄]并进行新记录。为此,我最初考虑使用类似的模式匹配技术,

switch(input) {
  |({name,_,gender} => //make a new record by extracting only name and age
  |_ => ();
}

这种方法有意义吗?如果是这样,我应该怎么做? 如果不是,从记录中删除键(记录是不可变的,因此这实际上没有意义)或从现有记录中提取另一条记录的正确方法是什么?

解决方法

您实际上不需要切换到模式匹配。

基本上,仅使用 let {name,gender,age: _} = input足以提取所需的两个属性。

您可以使用以下辅助功能:

type person = {
  name: string,gender: string,age: int,};

type nameAndGender = {
  name: string,};

let personToNameAndGender = (person) => {
  let {name,age: _} = person;
  {name,gender};
};

请记住,您需要事先定义两种记录类型。

注意:如果您只匹配部分记录,也可以省略年龄

let {name,gender}: person = person;

但是您需要注释它,因为类型系统无法自动找出它是两个记录中的哪个。

这里是working example