Elixir ではクロージャは作れない?

Elixir の関数は、関数を返すことができて、その関数は元の環境を覚えている。だからこないだのエントリでは「クロージャだ」と書いた。
だけど、今日になって違うんじゃないかと思うようになった。というのは、返ってきた関数は確かに元の環境を覚えているけど変更はできないみたいだからだ。
例えば、JavaScript で典型的なクロージャを書いてみよう。下の make_counter 関数の返す関数は、呼び出されるごとに 1 ずつ大きな数を返す。

^o^ > node counter.js
1
2
3

Elixir で同じように書いてみよう。

見てわかるように、JavaScript のコードをほぼそのまま Elixir で書き直したものだ。ところが、これを実行してみると:

^o^ > elixir counter.exs
1
1
1

このとおり、関数を何度呼び出しても数が増えていかない。
これって、やっぱりクロージャとは言わないんじゃ?それとも何か間違ってる?

Elixir ではクロージャは作れない?” への1件のコメント

  1. Hi there! This is my first visit to your blog! We are a group of volunteers and starting a new project in a community in the same niche.
    Your blog provided us beneficial information to work on. You have done a extraordinary job!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です