【发布时间】:2015-04-26 12:08:03
【问题描述】:
我希望能够将定义的类型用作defmethod 的参数专用器。动机是在后期更改的可读性和灵活性。有点像这样:
(deftype foo () 'fixnum)
(defmethod bar ((x foo)) ...)
(defmethod baz ((x foo)) ...)
但是这不起作用。 CLtL2 说 “表单 deftype 不创建任何类。”
所以我必须写:
(defmethod bar ((x fixnum)) ...)
(defmethod baz ((x fixnum)) ...)
另一种方法是定义一个名为foo 的类,它只不过是fixnum 的包装,但对于fixnum 这样简单的东西来说,这不是不可接受的开销吗?
有没有更好的办法?
【问题讨论】:
-
CLtL2 已过时。请使用基于 ANSI Common Lisp 标准的 Common Lisp HyperSpec CLHS。
-
CLHS 谈到
defmethod的paramet-specializer-names:如果 parameter-specializer-name 是一个符号,它会命名一个类 -
其实CLHS也说操作符deftype不会创建任何类。
标签: methods common-lisp dispatch clos deftype