lisp - Common Lisp - 从方法和函数中获取文档字符串?
问题描述
这是对先前提出的有关文档功能的问题的跟进,该问题显然值得单独发布。
有没有办法在 SBCL 中动态获取函数/宏或方法的文档字符串?
到目前为止 (documentation function-name 'function) 为我提供了常规函数的文档字符串(我也假设为宏),但不是方法。我尝试了“方法”、“标准方法”甚至“没有”,但它们似乎不起作用。
我的问题是我使用的环境(在基于 Lisp 的可视化编程界面中)充满了可以是函数或方法的小引擎,我不知道如何区分它们。我只需要用户能够快速获取库中任何给定符号(或工具)的文档字符串,无论其类型如何,当然如果它存在的话。
谢谢 !
朱利安
解决方案
符号命名函数,包括宏和泛型函数,但不包括方法。为了唯一标识一个方法,您需要知道泛型函数以及所有适用的修饰符和专门化符。
例如,PRINT-OBJECT
命名一个通用函数,但不足以引用特定方法。但是,您可以遍历所有专门针对泛型函数的方法并操作它们的文档:您无需将名称传递给DOCUMENTATION
,而是将函数对象和T
. 为了便于携带,请使用 close -mop:
(ql:quickload :closer-mop)
例如:
(lambda (generic-function)
(map 'list
(lambda (method) (documentation method t))
(closer-mop:generic-function-methods generic-function)))
=> #<FUNCTION (LAMBDA (GENERIC-FUNCTION)) {1001BBCD3B}>
让我们尝试一下:
CL-USER> (funcall * #'documentation)
(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)
哎呀。
CL-USER> (defmethod documentation ((test (eql :test)) _)
"Test documentation"
"Returned value")
...
CL-USER> (documentation :test t)
"Returned value"
CL-USER> (funcall *** #'documentation)
("Test documentation" NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)
推荐阅读
- android - 无法使用 onLocationChanged 获取位置
- ruby-on-rails - 将“collection_select”与数组一起使用
- python - 如何在熊猫中使用具有特定顺序的sort_index
- php - 未检测到或未加载 css
- linux - nvcc 致命:编译 matlab 时不支持的 gpu 架构“compute_20”
- c# - 使用 Windows 应用程序 c#/vb.net 在浏览器中关闭单个选项卡
- maven-3 - 如何确保 Maven 插件是线程安全的
- android - 图标没有出现在栏菜单android中
- mysql - 在连接表中插入附加数据
- python-3.x - 将字典键和值添加到 Redis 列表