defmodule Scopes.Core.Actor do defp loop(bhv) do receive do msg -> # IO.puts("receive: #{inspect msg}") case msg do {:message, msg} -> bhv.(msg) loop(bhv) {:become, bhv_n} -> loop(bhv_n) {:quit} -> nil end end end def create(bhv) do spawn_link(fn -> loop(bhv) end) end def send(ac, msg) do Kernel.send(ac, {:message, msg}) end def become(ac, bhv) do Kernel.send(ac, {:become, bhv}) end def stop(ac) do Kernel.send(ac, {:quit}) end end