method-generic-function 的含义是什么?
What' the meaning of method-generic-function?
我正在学习 common-lisp 和 CLOS。
我从 http://cl-cookbook.sourceforge.net/clos-tutorial/
的教程开始
4.3节中提到
A generic function is a lisp function which is associated with a set of methods and dispatches them when it's invoked.
它还有两个函数generic-function-methods
和method-generic-function
:
CL-USER 63 > #'my-describe
#<STANDARD-GENERIC-FUNCTION MY-DESCRIBE 21111C2A>
CL-USER 64 > (generic-function-methods #'my-describe)
(#<STANDARD-METHOD MY-DESCRIBE NIL (T) 2110B544>
#<STANDARD-METHOD MY-DESCRIBE NIL (ANIMAL) 21111BF4>)
CL-USER 65 > (method-generic-function (car *))
#<STANDARD-GENERIC-FUNCTION MY-DESCRIBE 21111C2A>
我能理解第一个(即generic-function-methods
),它告诉我泛型函数中的一组方法my-describe
。
但是第二个(即(method-generic-function (car *))
)呢?
不是很懂
PS:我尝试在REPL中使用这个函数,但是失败了:
CL-USER> #'method-generic-function
undefined.
[Condition of type UNDEFINED-FUNCTION]
我的环境是SBCL + quicklisp + slime。
我可以在 SBCL 中使用这个功能吗?
谢谢。
更新:
我好像明白了method-generic-function
的意思:
它只是 return 来自特定方法的通用函数 #<STANDARD-METHOD MY-DESCRIBE NIL (T) 2110B544>
。
迷惑的是(car *)
中的*
,好像return是最后一个表达式的值。
Method-generic-function
为您提供与给定方法关联的通用函数。
Method-generic-function
未导入到 SBCL 中的 cl-user
包中。您会在 sb-mop
中找到它(因此,sb-mop:method-generic-function
)。 MOP 并未完全纳入 Common Lisp 标准。
- 对于整个 MOP 的便携式使用,请使用库“Closer to MOP”(
closer-mop
)。
- 在 REPL 中,
*
指的是最后一个计算表达式的第一个 return 值。在您的例子中,这是由 generic-function-methods
编辑的方法列表 return。所以你看到这两个在这个one-to-many关系中或多或少是反函数。
我正在学习 common-lisp 和 CLOS。
我从 http://cl-cookbook.sourceforge.net/clos-tutorial/
的教程开始4.3节中提到
A generic function is a lisp function which is associated with a set of methods and dispatches them when it's invoked.
它还有两个函数generic-function-methods
和method-generic-function
:
CL-USER 63 > #'my-describe
#<STANDARD-GENERIC-FUNCTION MY-DESCRIBE 21111C2A>
CL-USER 64 > (generic-function-methods #'my-describe)
(#<STANDARD-METHOD MY-DESCRIBE NIL (T) 2110B544>
#<STANDARD-METHOD MY-DESCRIBE NIL (ANIMAL) 21111BF4>)
CL-USER 65 > (method-generic-function (car *))
#<STANDARD-GENERIC-FUNCTION MY-DESCRIBE 21111C2A>
我能理解第一个(即generic-function-methods
),它告诉我泛型函数中的一组方法my-describe
。
但是第二个(即(method-generic-function (car *))
)呢?
不是很懂
PS:我尝试在REPL中使用这个函数,但是失败了:
CL-USER> #'method-generic-function
undefined.
[Condition of type UNDEFINED-FUNCTION]
我的环境是SBCL + quicklisp + slime。
我可以在 SBCL 中使用这个功能吗?
谢谢。
更新:
我好像明白了method-generic-function
的意思:
它只是 return 来自特定方法的通用函数 #<STANDARD-METHOD MY-DESCRIBE NIL (T) 2110B544>
。
迷惑的是(car *)
中的*
,好像return是最后一个表达式的值。
Method-generic-function
为您提供与给定方法关联的通用函数。Method-generic-function
未导入到 SBCL 中的cl-user
包中。您会在sb-mop
中找到它(因此,sb-mop:method-generic-function
)。 MOP 并未完全纳入 Common Lisp 标准。- 对于整个 MOP 的便携式使用,请使用库“Closer to MOP”(
closer-mop
)。 - 在 REPL 中,
*
指的是最后一个计算表达式的第一个 return 值。在您的例子中,这是由generic-function-methods
编辑的方法列表 return。所以你看到这两个在这个one-to-many关系中或多或少是反函数。