言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

同値制約の実装法

たとえば二つの点よりなる線型と、ある二つの数が必ず同じであるという制約を利用して水平線型を実装する方法を考えました。ポイントは、初期化によってスロットにオブジェクトを束縛した後は、二度と代入を行わない事です。

  • 線型は Point 型のスロット(インスタンス変数) a b を持つ
  • a b に同値制約をかけたラッパオブジェクトを代入する。このラッパオブジェクトにあるメッセージが送信された時、実際には共通のオブジェクトに委譲されます。
  • a b は実際には同一のオブジェクトを参照しているので、線は常に水平となります。

シンボリックリンク問題、あるメッセージがリンクそのものに対するものか参照先のものなのかという問題が出ます。