有人可以帮助我理解这段Erlang代码
to_price_file(Line, OutputFile) ->
Fields = csv:parse_line(Line),
[SupplierID, ProductCode, Description, DeliveryDate, CostPrice, UnitCount] = Fields,
Product = calculate_product(list_to_integer(SupplierID),list_to_integer(ProductCode),
Description, **date_utils:parse_date(DeliveryDate)**,
list_to_integer(CostPrice), list_to_integer(UnitCount)),
ok = write_pricefile(Product, OutputFile),
ok.
Run Code Online (Sandbox Code Playgroud)
调用另一个子函数parse_date(下面).
parse_date(DateString) ->
Tokens = string:tokens(DateString, "/"),
**[Year, Month, Day] = [list_to_integer(Str) || Str <- Tokens],
{Year, Month, Day}.**
Run Code Online (Sandbox Code Playgroud)
我不明白,粗体字母的命令在子功能中做了什么.
谢谢,阿尼什
该函数parse_date/1假定日期字符串具有以下格式"Year/Month/Day":
parse_date(DateString) ->
Tokens = string:tokens(DateString, "/"),
[Year, Month, Day] = [list_to_integer(Str) || Str <- Tokens],
{Year, Month, Day}.
Run Code Online (Sandbox Code Playgroud)
它首先调用string:tokens/2哪个返回单独字段的列表,"/"是分隔符字符串.然后它执行一个列表理解,它对于Tokens调用中的每个元素list_to_integer/1并返回一个值列表.然后,它使用模式匹配将列表拆分为单独的部分,并返回带有值的元组.示例运行中的变量值可以是:
DateString = "2013/03/08"
Tokens = ["2013","03","08"]
[Year,Month,Date] = [2013,3,8]
{2013,3,8}
Run Code Online (Sandbox Code Playgroud)
列表推导是非常常见的,并且通常是将操作应用于列表中的每个元素的非常简洁的方式,例如lists:map/2,使用过滤选项(此处未使用).
请注意,在ISO标准中,日期应写为2013-03-08.:-)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |