goopsライブラリ(http://wiki.call-cc.org/eggref/4/coops)のdefine-genericの目的は何かを理解しようとしています。私はCLOSも知らない)。私はこの方法でクラスやメソッドを定義することができチキンスキームのcoopsオブジェクトシステムのdefine-genericの目的は何ですか
:
(define-class <complex>() (x y))
(define-method (sum (a <complex>) (b <complex>))
(make <complex>
'x (+ (slot-value a 'x) (slot-value b 'x))
'y (+ (slot-value a 'y) (slot-value b 'y))))
しかし、これの目的は何ですか?ドキュメントから
(define-generic (sum <complex> <complex>))
:
[syntax] (define-generic (NAME ARGUMENT ...))
は、一般的な手順、一つ以上の 引数の型に特化した手順を定義します。 ARGUMENT ...正しい メソッドにディスパッチするために使用される、この汎用プロシージャの特化された 引数の数を定義します。ジェネリックプロシージャは追加の引数を受け取るかもしれませんが、 はそれらのメソッドの決定には使用されません。
誰かが、define-method
とdefine-generic
の違いを説明する簡単な例を教えてください。
これは当てはまります。 'define-generic'の主な使い方は、ジェネリックプロシージャが存在すると宣言したいが、それについての実装がまだない場合です。基本的には、抽象基本クラスのように不完全なAPIを定義することができます。 'define-generic'はジェネリックプロシージャが存在することを保証しますので、" unbound variable "エラーは発生しません。 'define-generic'を宣言するために' define-generic'を使わなかったとしても、 'define-method'が動作するという事実は便宜上のものです。 – sjamaan