- schemeでOOP : (2004/07/15)
-
schemeでOOPをするときはクロージャを使う
関数を返す関数を定義し、外側の関数にコンストラクタの機能を持たせる
この場合、外側の関数が返す値(内側の関数のことだが)がオブジェクトとなる
外側の関数の変数のスコープは、オブジェクトが生存する限り有効
下記の関数create-objは、メンバ変数paramの値を増減させるだけのメソッドを持つオブジェクトを生成する
メソッド名はそれぞれparam+とparam-
(define
create-obj
(lambda
(param)
(lambda (method amount)
(cond ((eq? method 'param-)
(if (>= param amount)
(set! param (- param amount))
(display "insufficient funds "))
param)
((eq? method 'param+)
(set! param (+ param amount))
param)
(#t
(display "undefined method : ")
(display method)
(newline))))))