You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Common Lisp的class-name函数在SBCL REPL传入实例时报错?正确用法是什么?

class-name的入参要求为类对象,你报错是因为直接传入了stack-overflow类的实例,类型不匹配导致泛函数找不到可用方法。

正确用法分为两种常见场景:

  1. 已知类名的情况下,先通过find-class获取对应类对象,再传入class-name
  2. 仅持有类实例的情况下,先通过class-of获取该实例对应的类对象,再传入class-name

对应你的测试场景,完整可运行的示例如下:

CL-USER> (defclass stack-overflow () 
           ((slot-1 :initform 1 )
            (slot-2 :initform 2)))
#<STANDARD-CLASS COMMON-LISP-USER::STACK-OVERFLOW>
CL-USER> (defvar test-one (make-instance 'stack-overflow))
TEST-ONE

; 场景1:已知类名时的调用
CL-USER> (class-name (find-class 'stack-overflow))
STACK-OVERFLOW

; 场景2:仅持有实例时的调用
CL-USER> (class-name (class-of test-one))
STACK-OVERFLOW

内容的提问来源于stack exchange,提问作者Pedro Delfino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:54:02