elixir-in-action/chapter5/calculator_refactor.ex
2020-06-20 13:57:33 -05:00

35 lines
723 B
Elixir

defmodule Calculator do
def start do
spawn(fn -> loop(0) end)
end
defp loop(current_value) do
new_value =
receive do
message -> process_message(current_value, message)
end
loop(new_value)
end
defp process_message(current_value, {:value, caller}) do
send(caller, {:response, current_value})
current_value
end
defp process_message(current_value, {:add, value}) do
current_value + value
end
defp process_message(current_value, {:sub, value}) do
current_value - value
end
defp process_message(current_value, {:mul, value}) do
current_value * value
end
defp process_message(current_value, {:div, value}) do
current_value / value
end
end