【问题标题】:Proper way of ReasonML record pattern-matchingReasonML 记录模式匹配的正确方法
【发布时间】:2020-10-22 19:26:44
【问题描述】:

我有一个记录类型,

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

并且有很多符合该类型的记录。我想要做的是仅从该人中提取[姓名,年龄]并制作新记录。为此,我最初考虑使用一种模式匹配技术,如下所示,

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

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

【问题讨论】:

    标签: pattern-matching reason


    【解决方案1】:

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

    基本上,只需使用 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;
    

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

    这是working example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 2011-10-29
      • 2013-10-19
      • 1970-01-01
      相关资源
      最近更新 更多