【问题标题】:LISP - get all method names from a classLISP - 从类中获取所有方法名称
【发布时间】:2016-12-06 20:17:06
【问题描述】:

我可以在 LISP 中获取一个类的所有方法名称吗?

其实我需要的方法有

设置-

以他们的名义。

【问题讨论】:

  • 您要查找的内容称为 MOP - MetaObject Protocol
  • 类上没有定义方法。他们根据一个或多个参数专门化泛型函数。您可能希望找到所有名为“set-”的方法,该方法专门将类作为第一个参数。但也许更重要的是,为什么?
  • @coredump using SET 我正在设置一些属性,我需要打印这些属性名称。有的保存在slots中,但也有一些属性没有保存在slots中,所以获取所有slots是不够的。

标签: methods lisp common-lisp clos


【解决方案1】:

对于 LispWorks:

(defun find-all-methods (class prefix)
  (loop for method in (clos:specializer-direct-methods class)
        for gf           = (method-generic-function method)
        for fname        = (generic-function-name gf)
        for fname-string = (when (symbolp fname) (symbol-name fname))
        when (and (stringp fname-string)
                  (>= (length fname-string)
                      (length prefix))
                  (string= fname-string prefix
                           :end1 (length prefix)
                           :end2 (length prefix)))
        collect method))

例子:

CL-USER 20 > (pprint (find-all-methods (find-class 'capi:button) "PRINT-"))

(#<STANDARD-METHOD CAPI:PRINT-COLLECTION-ITEM NIL (CAPI:BUTTON T) 40E06173D3>
 #<STANDARD-METHOD CAPI:PRINT-CAPI-BUTTON NIL (CAPI:BUTTON) 40E05F9DDB>)

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多