首页 > Erlang并发教程 > 第五章 使用元组 > 5.2 Erlang并发编程-返回多个值
2013
11-07

5.2 Erlang并发编程-返回多个值

返回多个值
我们经常想让一个函数返回多个值,使用元组来实现这一目的是十分方便的。

例如,函数parse_int(List)从一个由ASCII字符构成的列表List中提取最开始的数字,如果存在,就返回一个由被提取出来的数字和列表剩下的部分组成的元组,如果列表中没有数字的话,就返回原子式eoString。

parse_int(List) ->
    parse_int(skip_to_int(List), 0).

parse_int([H|T], N) when H >= $0, H =< $9 ->
    parse_int(T, 10 * N + H - $0);
parse_int([], 0) ->
    eoString;
parse_int(L, N) ->
    {N,L}.

skip_to_int(L)返回L中第一个以ASCII字符0到9中的任意一个开始的子列表。

skip_to_int([]) ->
    [];
skip_to_int([H|T]) when H >= $0, H =< $9 ->
    [H|T];
skip_to_int([H|T]) ->
    skip_to_int(T).

如果我们使用字符串”abcd123def”(”abcd123def”的列表形式是[97,98,99,49,50,51,100,101,102])来测试parse_int:

> tuples:parse_int("abc123def").
{123,[100,101,102]}}

在parse_int的基础上,可以实现一个提取所有嵌入在字符串里面的数字的解释器。

parse_ints([]) ->
    [];
parse_ints(L) ->
    case parse_int(L) of
        eoString ->
            [];
        {H,Rest} ->
            [H|parse_ints(Rest)]
    end.

因此:

> tuples:parse_ints("abc,123,def,456,xx").
[123,456]

5.2 Erlang并发编程-返回多个值》有 1 条评论

  1. lovefang 说:

    纪念下,今天看到这儿了~~

留下一个回复

你的email不会被公开。