我知道它def*
可以有文档字符串,所以我只是尝试一下 lambdas。
令人尴尬的是,以下返回 NIL。
(documentation (lambda () "a function which always returns nil" nil) 'function)
怎么了?lambdas 不能有文档字符串吗?有没有办法做到这一点?
我知道它def*
可以有文档字符串,所以我只是尝试一下 lambdas。
令人尴尬的是,以下返回 NIL。
(documentation (lambda () "a function which always returns nil" nil) 'function)
怎么了?lambdas 不能有文档字符串吗?有没有办法做到这一点?
根据 HyperSpec 部分Symbol LAMBDA,语法是:
lambda lambda-list [[declaration* | documentation]] form*
因此明确允许使用文档字符串。标准通用函数文档(SETF DOCUMENTATION)列出了两个标准方法签名:
documentation (x function) (doc-type (eql 't))
documentation (x function) (doc-type (eql 'function))
这与您尝试调用它的方式相匹配。
但是,功能描述包括以下警告:
文档字符串可用于调试目的。允许符合标准的程序在存在文档字符串时使用它们,但它们的正确行为不应依赖于这些文档字符串的存在。出于实现定义的原因,允许实现随时丢弃文档字符串。
因此,虽然从技术上讲,在您的情况下没有保存文档字符串并不是一个错误,但这是一个糟糕的实现。
正如 Barmar 所说,这是可能的,但也是可选的。
CLISP 和 SBCL 支持匿名 lambda 函数的文档字符串。
CCL、ECL 和 LispWorks 没有。