首页 理论教育 函数式编程入门:使用Elixir的匹配映射表

函数式编程入门:使用Elixir的匹配映射表

时间:2023-11-20 理论教育 版权反馈
【摘要】:在IEx中输入以下内容:在这个例子中,我们访问键:strength并将其值绑定到变量strength_value。如果映射表中没有这个键,则会出现MatchError。现在strength_value为16,它将尝试匹配映射表abilities,而abilities包含键值strength: 16。我们也可以把这个表达式分解成两步:这里,我们借助锁定运算符用strength_value变量的值来匹配abilities。

函数式编程入门:使用Elixir的匹配映射表

映射表是键/值对结构的数据类型,用于表示一组带有标签的,需要放在一起的值。例如,如果想记录用户注册信息,可以用映射表存储字段和值。

%{}是创建映射表的语法。email:是键,它是一个原子。“johndoe@mail.com”是:email键对应的值。使用=>的等价语法表示如下:

虽然有点繁琐,但这种语法可以在键中存储任何值。比如:

我们还可以创建更复杂的嵌套结构:

可以使用模式匹配来检查映射表的值和键。在IEx中输入以下内容:

在这个例子中,我们访问键:strength并将其值绑定到变量strength_value。模式匹配表达式会自动检索映射表的子集,所以我们不需要给出所有的键就能匹配成功。我们只需要给出想访问的键。如果映射表中没有这个键,则会出现MatchError。请试一试:

如果使用空映射表,它将匹配所有映射表。(www.xing528.com)

我们还可以用模式匹配表达式同时提取和检查值。这里继续使用上一个示例中的变量abilities,在IEx中尝试这个新模式:

这个表达式要求abilities变量必须有一个值为10的:intelligence键,同时,它还检查:dexterity键是否存在,如果存在,则将其值提取出来,绑定到变量dexterity_value。

还可以在模式匹配表达式左侧使用=运算符做绑定和检查。试一下:

要理解这个表达式,请先单独看strength_value=16。表达式将值16绑定到变量strength_value。现在strength_value为16,它将尝试匹配映射表abilities,而abilities包含键值strength: 16。匹配成功!我们也可以把这个表达式分解成两步:

这里,我们借助锁定运算符用strength_value变量的值来匹配abilities。

第一个版本适用于简单赋值的情况;第二个版本适用于赋值前需要做些计算和函数调用的情况。这样,你的代码会更容易让人理解。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈