首页 > 解决方案 > 便携使用make-instance做条件?

问题描述

在 Common Lisp 中,使用make-instance而不是make-condition制作条件对象是否可移植?

例如:

(define-condition foo (condition)
  ())

(make-condition 'foo)
(make-instance 'foo)

这是否与如何在 CLOS 类层次结构中放置条件有关?(subtypep 'condition 'standard-class)在 SBCL 和 CLISP 中返回 false。但是,make-instance可以在两种实现方式中设置条件。这是由标准保证的吗?

标签: error-handlingcommon-lispclos

解决方案


根据 Practical Common Lisp 第 19 章中的第 4 个脚注,它是不可移植的:

“在一些 Common Lisp 实现中,条件被定义为 STANDARD-OBJECT 的子类,在这种情况下,SLOT-VALUE、MAKE-INSTANCE 和 INITIALIZE-INSTANCE 将起作用,但依赖它是不可移植的。”

链接到特定页面:

http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html


推荐阅读