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
{bill, From, Minutes}carga la dirección de retorno.- El trabajador responde
From ! {billed, ...}y vuelve al bucle. - El receive de quien llama matchea solo la respuesta esperada.
Palabras clave y builtins usados aquí
beginendfunreceivespawn
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.
Paso 3 de 4 en Procesos; paso 27 de 31 en Fundamentos del lenguaje.