清流elixirclosureとは何か難しい概念の説明は強いエンジニアや大学の賢い先生方にお任せするため、深い説明は行わない。言うと、関数の中である値を保持させておいて、その値を変化させる(操作する)ための変数を保持している関数の内部に用意された無名関数のことだ。変数にアクセスするためにはclosure経由でのみしか許可させない、変数の値を変化させるためにはclosure経由でしか行わせないとすることで、変数のスコープを上手く隠すことが可能になる。実装はめちゃくちゃシンプル。tourで解説されているclosureのサンプルを引数のコマンド経由で色んな処理が行える様にしただけだ。このカウンターを作成したかというと、業務でgolangを使って、jsonからマーシャルしたデータを集計して返すみたいな処理が多発しており、大量のカウント用の変数の用意と管理がめんどくさくて、何かオシャレにしたろと思い出来上がったのがこれ。カウンターをclosureで作成。0このように動作する。先ほどの説明の通り、sumという変数の操作には、returnで返された無名関数とコマンド(引数)経由でのみしか行うことが出来ないでは本命のElixirで無名関数と聞いてElixirで実装しないわけにはいかない。作れそうなので作ってみた。思ったがこれがかなり難しい。関数型言語で値が変化されないことが約されるので、先ほどのように元の変数に対して操作を行うという処理をするのは想像以上に難しい。あれこれ工夫した結果、以下の様な形に追いついた。endend流れとしては、カウント用のプロセスを立ち上げて、そのプロセスに対してメッセージという形でコマンドを送り、プロセスが保持している値(カウンター)を操作するという形になる。その一連の処理を簡潔に行いたいので、counterという関数にプロセスの生成から、メッセージのパッシングまでを内部化させて使用者に見えない様にしている。exit:ok思ったことが出来ている。使用者には内部の実装を意識させないようにすることも出来た。カウントさせるだけの処理にこれだけコード量を記述するのは正直なところ「うーん」という感じなので、何か良い方法はないかと模索していたところ、以下の回答を発見したelixirforum.comなるほど、Agentを使えば、確かに簡単に実装できそう。counter.(:get)0同様の使用感で使うことが出来る。週間)「俺また、やっちゃいました?(致命的バグ)」なろう系23歳の非異世界転生なWeb系Developer。Elixirという言語を推し中。清流elixir運営してます。紅茶の勉強を始めたり、チャリを買おうとして買わなかったりと興味が分散しがち。今は、並行コンピューティングに強めの興味があります。(2)月別アーカイブ広告はてなブログをはじめよう!takamizawa46さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。