ワークスペース変数

 昨日の記事で書き足りない部分があったので書き足し。
 勿論、ワークスペースだってSqueakの一部だもの、スペルチェックをしてタイプミスを教えてくれたりするのですが、変数名に限ってはチェックが効かないらしいのです。これはやっかいです。id:sumim:20061126:p1の記事にも書かれている通り、“完全な悪”とまでおっしゃってます。id:abee2さんから「ワークスペース変数は百害あって一理なしと思います。」とのコメントも頂きました。
 そもそも自分、ワークスペース変数っていうか、ワークスペースについてよく知らないな という事に気付きまして、その件についてGoogle先生に聞いてみたら、とりあえずSqueak-ja メーリングリストの保存書庫ページに案内された。以下、保存書庫よりちょっとだけ引用させていただきます。

Workspace のインスタンス変数というのは、おそらくクラスWorkspace に定義された bindings のことだと思います。これは『ワークスペース変数の仕組み』を実現しているものです。このインスタンス変数には連想配列のオブジェクト(Dictionary)がぶら下がってます。
ワークスペースで式を実行すると、式の中で出現したワークスペース変数名をキー(添字)にして、そのワークスペース変数に代入(バインド)されたオブジェクトが、この連想配列に登録されていきます。

キー 値
#a星2142 -> {星のオブジェクト}
#a四角形233 -> {四角形のオブジェクト}
#a楕円1482 -> {楕円のオブジェクト}
...

という感じです。
次の実行時には、式の中の変数名でこの連想配列を辞書引きして、その連想値であるオブジェクトに置き換えてるということですね。こうすると変数として機能する見えるという仕掛けです。
また、bindings は Workspace のインスタンス変数なので、一枚一枚のワークスペース(Workspaceのインスタンス)ごとに別なオブジェクトになりますので、必然的にスコープはワークスペースごととなります。ですのでグローバル変数ほどスコープは広くはないです。

http://www.smalltalk.jp/pipermail/squeak-ja/2006-December/003269.html

 Dictionaryを使ってるんだぁ。確かに、System Browserで調べてみたら bindings := Dictionary new とかやってる箇所がある。けど、まだよくわかんない^^; もうちょっと調べてみよう。っていうか寝よう。