Clojure の Var に関して覚書
なんか面倒くさい。 Clojure Programming 読んでていきなり Chapter1 とかでチラッと出てくるんだけど、一緒に Clojure 勉強しているスクラムマスターが混乱したくらいには面倒くさいというか。面倒くさい。
事の発端はこれ
昨日スクラムマスターが
「Clojure の変数はイミュータブルだから…」
(def x 5)
「こうやって…」
(def x 6)
「こうしても値が変わらないんだ(ターン」
x ;=> 6
「What happened!?」
ってやってたのが最高に面白かった
— あやぴー (@ayato_p) June 12, 2014
僕のこの段階での認識としては、以下の通りだった。
- var を使えばオブジェクトそのものを参照できる
- 同名のシンボルを定義した場合、環境に新しく定義されたシンボルの方が参照されるのではないか
ただ自信もないし、うーんって感じだったので Twitter で識者にちょっと聞いてみた。
Clojure の Var について - Togetterまとめ
結局 def を使うときに Var オブジェクトを同時に作っていてそれは「参照」であり、その「参照」はミュータブルなオブジェクトということでいいらしい。だから、 def によって再定義が可能であるとか。ただ、参照先のオブジェクトは不変ですよ、と。難しいなー。もう少しいろんなことを勉強しなくては。特に束縛あたりの理解が曖昧だ。むーん。