2013-03-08 3 views
0

Может кто-то помочь мне понять этот кусок кода ErlangErlang: Объясните кусок кода

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. 

другой подфункции parse_date (ниже) называется.

parse_date(DateString) -> 
    Tokens = string:tokens(DateString, "/"), 
    **[Year, Month, Day] = [list_to_integer(Str) || Str <- Tokens], 
    {Year, Month, Day}.** 

Я не понимаю, что команды в жирных букв делать в подфункции.

Спасибо, Аниш

ответ

6

Функция 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}. 

Это первое вызывает 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} 

Список постижения весьма распространены и часто очень кратким способом применения операции к каждому элементу в списке, как lists:map/2, с возможностью фильтрации (не используется Вот).

Обратите внимание, что в стандарте ISO дата должна быть указана как 2013-03-08. :-)

+0

Большое спасибо! – anishjp

Смежные вопросы