我试图找出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-method
和define-generic
之间的差异吗?
答案 0 :(得分:2)
通用过程是一种特殊的对象,由(一个或多个)专用方法组成。
define-generic
定义了这样一个对象,define-method
为其添加了方法,如果它不存在则创建它。