Skip to content

Instantly share code, notes, and snippets.

@jakubkulhan
Created July 3, 2012 09:23
Show Gist options
  • Save jakubkulhan/3038716 to your computer and use it in GitHub Desktop.
Save jakubkulhan/3038716 to your computer and use it in GitHub Desktop.
Simplified Erlang code from http://www.knesl.com/articles/view/erlang-oop
-module(mujobjekt).
-export([start/0, ahoj/4, zavislost1/0, zavislost2/0, zavislost3/0]).
zavislost1() ->
receive
{neco_udelej, Pid, Parametr} ->
Pid ! {mam_to, self(), Parametr + 1};
{mam_to_cele, {Vysledek1, Vysledek2, Vysledek3}} ->
io:format("~p, ~p, ~p~n", [Vysledek1, Vysledek2, Vysledek3])
end,
zavislost1().
zavislost2() ->
receive
{spocitej, Pid, Parametr} ->
% počká 1000 ms
receive
after 1000 ->
Pid ! {mam_to, self(), Parametr + 2}
end
end,
zavislost2().
zavislost3() ->
receive
{spocitej, Pid, Parametr} -> Pid ! {mam_to, self(), Parametr + 3}
end,
zavislost3().
ahoj(Zavislost1, Zavislost2, Zavislost3, Parametr1) ->
Zavislost1 ! {neco_udelej, self(), Parametr1},
Vysledek1 = receive {mam_to, Zavislost1, V1} -> V1 end,
Zavislost2 ! {spocitej, self(), Vysledek1},
Zavislost3 ! {spocitej, self(), Vysledek1},
Vysledek2 = receive {mam_to, Zavislost2, V2} -> V2 end,
Vysledek3 = receive {mam_to, Zavislost3, V3} -> V3 end,
Zavislost1 ! {mam_to_cele, {Vysledek1, Vysledek2, Vysledek3}}.
start() ->
Zavislost1 = spawn(?MODULE, zavislost1, []),
Zavislost2 = spawn(?MODULE, zavislost2, []),
Zavislost3 = spawn(?MODULE, zavislost3, []),
ahoj(Zavislost1, Zavislost2, Zavislost3, 0).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment