typestar

Llamada y respuesta en Erlang

Etiqueta pedidos con self(); matchea la respuesta por forma.

%% The call-and-reply shape: tag requests with self(), match replies.
biller() ->
    receive
        {bill, From, Minutes} ->
            From ! {billed, Minutes * 4},
            biller();
        stop -> ok
    end.

main(_) ->
    Pid = spawn(fun biller/0),
    [begin
         Pid ! {bill, self(), M},
         receive {billed, Pence} ->
             io:format("~p min -> ~p pence~n", [M, Pence])
         end
     end || M <- [3, 12, 7]],
    Pid ! stop.

Cómo funciona

  1. {bill, From, Minutes} carga la dirección de retorno.
  2. El trabajador responde From ! {billed, ...} y vuelve al bucle.
  3. El receive de quien llama matchea solo la respuesta esperada.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
355
Tokens
112
Ritmo de tres estrellas
55 tpm

Al ritmo de tres estrellas de 55 tokens por minuto, este intento toma unos 122 segundos.

Escribe este fragmento

Paso 3 de 4 en Procesos; paso 27 de 31 en Fundamentos del lenguaje.

← Anterior Siguiente →