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,
gender: string,
};
let personToNameAndGender = (person) => {
let {name, gender, age: _} = person;
{name, gender};
};

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

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

let {name, gender}: person = person;

但是您需要对其进行注释,因为类型系统无法自动确定它是两个记录中的哪一个。

下面是一个工作示例。

最新更新