next up previous
Next: 15.7 例 Up: 15 CLOSのクラスシステムの実現 Previous: 15.5 メソッドの探索

15.6 Sendの実現

Sendはインスタンスに対してメッセージを送るものです. インスタンスはクロージャですから,そのクロージャに 与えるべき引数を用意してfuncallすることになります.

(defmacro send (inst mess &rest args)
  `(funcall ,inst ,inst ,mess ,@args))

(defmacro <- (mess &rest args)
  `(funcall self self ,mess ,@args))

(defmacro slot-value* (inst mess &rest args)
  `(funcall ,inst ,inst ,mess ,@args))
以上のようにクロージャによりオブジェクト指向のオブジェクトを 表現することが可能になっています. また,self変数はそのメッセージが最初に送られたオブジェクトを指します. それは,このクロージャの第一引数がselfという名前に なっていることで実現できています.

generated through LaTeX2HTML. M.Inaba 平成18年5月6日