Elixirでstate(状態)を持つ

Elixir
更新2020/12/01
状態を持たないのが関数型言語の命題であるものの、そうはいっても状態が必要なときもあるのでAgentを使って解決するみたいです。
例えば、現在の数値をインクリメントしていくような処理を書く場合、現在の値を保存する必要があります。
そんなときはAgentを使うみたいです。
@agent :counter # 任意のアトム
count = 0

{:ok, pid} = Agent.start_link(fn -> count end, name: @agent)
これでAgentのプロセスに :counter という名前付きで値を保存できる。
今回みたいにnameを指定しているとき、差し当たってpidの取り回しは不要そう。

現在の値を呼び出して、更新するときはこのように書く感じ。
current_count = Agent.get(@agent, fn n -> n end)
next_count = current_count + 1
Agent.update(@agent, fn _state -> next_count end)
名前を付けない場合はpidを指定してAgent.get(pid, fn state -> state end)のように値を取り出せるみたい。

詳しくは-> 公式
参考-> [翻訳] Elixir ─ 状態はどこにある?

書いた人/このブログについて

サーバーサイドエンジニア。お仕事ではRubyとPerl。趣味ではC#やHLSLなどを少しと、3DCGでPythonをごまかしながら使う感じ。Unityとインフラ周りも好き。

自分の備忘録もGoogle検索に任せたくてこのブログ書いてる。Phoenix製でEC2上で稼働中。