erlang - 通过匹配 erlang 中的键来创建和访问记录的值
问题描述
我正在尝试使用 map 声明和初始化记录(Example: -record(month_names,#{1=> "January",2=>"February",3=>"March",4=>"April",5=>"May",6=>"June",7=>"July",8=>"August",9=>"September",10=>"October",11=>"November",12=>"December"}).
),但是当我尝试访问 map 的值时,它没有得到输出。
试过的代码:
**
-module(main).
-export([calender/1]).
-record(month_days, #{1=> "31",2 => "28",3=>"31",4=>"30",5=>"31",6=>"30",7=>"31",8=>"31",9=>"30",10=>"31",11=>"30",12=>"31"}).
-record(month_names,#{1=> "January",2 => "February",3=>"March",4=>"April",5=>"May",6=>"June",7=>"July",8=>"August",9=>"September",10=>"October",11=>"November",12=>"December"}).
calender(Year) ->
Day = #month_days{month_days= 1,val= 1},
io:fwrite("~p~n",Year),
io:fwrite("~p~n", [Day#month_days.month_days]).
**
但我在下面给出的错误:
错误 :
**
10> c(main).
main.erl:3: bad record declaration
main.erl:4: bad record declaration
main.erl:8: record month_days undefined
main.erl:10: record month_days undefined
error
**
解决方案
我正在尝试使用地图声明和初始化记录
这在 Erlang 中是不可能的。Erlang 记录以原子作为键,可以选择提供默认值,并且不能用映射初始化。有关记录,请参阅编程示例。
在这种情况下,您不需要使用记录;您可以按原样使用地图:
calender(Year) ->
MonthDays = #{1=> "31",2 => "28",3=>"31",4=>"30",5=>"31",6=>"30",7=>"31",8=>"31",9=>"30",10=>"31",11=>"30",12=>"31"},
MonthNames = #{1=> "January",2 => "February",3=>"March",4=>"April",5=>"May",6=>"June",7=>"July",8=>"August",9=>"September",10=>"October",11=>"November",12=>"December"},
%% get number of days for month 1
#{1 := Days} = MonthDays,
io:fwrite("~p~n", [Year]),
io:fwrite("~p~n", [Days]).
如果要映射从 1 开始的连续整数的小序列,则可以使用元组而不是映射并使用element
函数访问相应的值:
> MonthNames = {jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec}.
{jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec}
> MonthNumber = 2.
2
> element(MonthNumber, MonthNames).
feb
有一些您可能会发现有用的库函数,例如calendar:last_day_of_the_month/2
和calendar:day_of_the_week/3
:
> calendar:last_day_of_the_month(2020, 2).
29
> calendar:day_of_the_week(2021, 2, 17).
3
推荐阅读
- python - 如何访问一对多关系中的多个字段
- sql - 如何解决公共表表达式的递归成员有多个递归引用?
- linux - 加载的 ELF 段的重叠映射
- eclipse - 无法在 Eclipse 中定义 tomcat(v9) 服务器
- java - Android 保留一个位图作为更改色调、对比度、饱和度等的源
- java - ClassCastException NimbusJwtDecoder 无法转换为 NimbusJwtDecoderJwkSupport
- python - 到 csv 的字典列表。一行中的每个列表
- python - 在odoo的controller文件中,type为json时如何改变json响应格式?
- c - C中的位移无符号长整数
- .net - 如何在基于 linux 的 ec2 实例中安装 .net core 3.1