Schemeでオブジェクトシステム自作
前回の学科の読書会にて、「Lispならオブジェクト指向のシステムは言語仕様として組込まなくてもいいんだぜ。自分で作ることだってできるんだぜ」と言ったのだけれど、言うは易し行うは難しということで、実際に作ってみることにした。
とりあえず、今はクラス定義とかのマクロを書く準備として、マクロの展開形を書いているところ。
(適当な)仕様
コードの見た目とか動作をみなさんおなじみのJavaっぽく。
ということはつまり、メソッドの名前空間はクラスである。(意味もなく)メソッドをクロージャとして取りだせなくしたり、publicとprivateのアクセスレベルを設定できたり。
こんなコードになるかも。
(class Man (private name = "Sussman") (public getName () (get-private name)) (public setName (new-name) (set-private! name new-name)) (public toString () (format #f "My name is ~a" (get this getName)))) (define a-man (new Man)) (exec a-man toString) => "My name is Sussman" (exec a-man setName "Graham") => "Graham" (exec a-man getName) => "Graham"
キモい、キモすぎる。