提问人:Pedro Delfino 提问时间:3/8/2022 最后编辑:Pedro Delfino 更新时间:3/10/2022 访问量:83
如何在 Steel Bank Common Lisp (SBCL) 中使用 'class-direct-superclasses' 和 'class-precedence-list'?
How to use `class-direct-superclasses` and `class-precedence-list` in Steel Bank Common Lisp (SBCL)?
问:
在诸如此类的教程中,可以简单地使用:
CL-USER> (class-precedence-list (find-class (class-name (class-of 123))))
在 LispWorks 中,它们可以通过默认的 package-use-list 获得,在 Allegro 中,它们可以从 ACLMOP 导出。
但是,如何使用和在SBCL中?class-precedence-list
class-direct-superclasses
Obs.:这个教程有一个关于CLOS的新版本,通过The Common Lisp Cookbook。
答:
0赞
Pedro Delfino
3/8/2022
#1
在 SBCL 中,必须使用包表示法从以下位置导入符号:sb-mop
CL-USER> (sb-mop:class-direct-superclasses (find-class (class-name (class-of 123))))
(#<BUILT-IN-CLASS COMMON-LISP:INTEGER>)
CL-USER> (sb-mop:class-precedence-list (find-class (class-name (class-of 123))))
(#<BUILT-IN-CLASS COMMON-LISP:FIXNUM> #<BUILT-IN-CLASS COMMON-LISP:INTEGER>
#<BUILT-IN-CLASS COMMON-LISP:RATIONAL> #<BUILT-IN-CLASS COMMON-LISP:REAL>
#<BUILT-IN-CLASS COMMON-LISP:NUMBER> #<SB-PCL:SYSTEM-CLASS COMMON-LISP:T>)
评论
class-direct-superclasses
是CLOS的元对象协议(MOP)的一部分,该协议不是标准化的,因此可能因实现而异。一个很好的起点是 Closer to MOP,它在各种实现之上构建了一个相当标准的 MOP。它在 Quicklisp 中。