Chicken Scheme中coops对象系统中define-generic的目的是什么

时间:2017-07-13 19:51:59

标签: oop scheme chicken-scheme

我试图找出goop库中的define-generic的目的是什么(http://wiki.call-cc.org/eggref/4/coops),它与CLOS类似,如果它可以帮助某人(我不会'知道CLOS要么。)

我可以这样定义一个类和一个方法:

(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-methoddefine-generic之间的差异吗?

1 个答案:

答案 0 :(得分:2)

通用过程是一种特殊的对象,由(一个或多个)专用方法组成。

define-generic定义了这样一个对象,define-method为其添加了方法,如果它不存在则创建它。