在CLOS中,如何指定方法参数是(例如)字符串的列表?
。比如:
(defmethod m1 ((x (every 'string)))
(dolist (y x) (print (char y 0))))
你不能。方法只能对类进行专门化,不能对类型进行专门化。您可以用deftype
和satisfies
手动定义类型list-of-strings
,但将其用作defmethod.
中的专门化符仍然无效。来自CLHS的定义方法条目:
只能专门化必需的参数。如果parameter-特殊化器-name是一个符号,它命名一个类。