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