Hello everyone,
Here is some erlang code I wanted to translate to Elixir… here is a simple example in the console.
$ erl
Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
Eshell V10.4.4 (abort with ^G)
1> Pid=self().
<0.82.0>
2> Ref = monitor(process, Pid).
#Ref<0.2147538226.2721841158.105393>
3> receive
3> {'DOWN', Ref, process, Pid, Why} -> Why
3> end.
and here is the Elixir version I came up with…
$ iex
Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
Interactive Elixir (1.9.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> pid = self()
#PID<0.108.0>
iex(2)> ref = Process.monitor(pid)
#Reference<0.417878796.1379926020.235519>
iex(3)> receive do
...(3)> {:DOWN, ref, :process, pid, why} -> why
...(3)> end
warning: variable "pid" is unused (if the variable is not meant to be used, prefix it with an underscore)
iex:4
warning: variable "ref" is unused (if the variable is not meant to be used, prefix it with an underscore)
iex:4
Code is quite similar, but in the Elixir version, ref and pid are not seen by the receive block, while the Erlang version will match on a ‘DOWN’ message where Ref and Pid are set.
Why is that different?
Thanks for taking time