lambdas可以有docstrings吗?

Mik*_*one 2 lisp common-lisp ccl

我知道def*可以有docstrings,所以我只是尝试一下lambdas.

令人尴尬的是,以下内容返回NIL.

(documentation (lambda () "a function which always returns nil" nil) 'function)
Run Code Online (Sandbox Code Playgroud)

怎么了?lambdas不能有docstrings吗?有办法吗?

Bar*_*mar 7

根据HyperSpec部分符号LAMBDA,语法为:

lambda lambda-list [[declaration* | documentation]] form*
Run Code Online (Sandbox Code Playgroud)

所以显然允许使用doc字符串.标准通用功能文档(SETF DOCUMENTATION)列出了两个标准方法签名:

documentation (x function) (doc-type (eql 't))
documentation (x function) (doc-type (eql 'function))
Run Code Online (Sandbox Code Playgroud)

这与你试图调用它的方式相匹配.

但是,功能描述包括以下警告:

文档字符串可用于调试目的.允许合规程序在文档字符串存在时使用它们,但不应依赖于它们在存在这些文档字符串时的正确行为.由于实现定义的原因,允许实现随时丢弃文档字符串.

因此,虽然从技术上讲,文件字符串在您的情况下不会保存,但这是一个糟糕的实现.

  • 因为人们使用CL实现做的事情多于运行代码,所以他们还需要使用它来编写和调试.如果一个实现忽略了文档字符串,那么它会使这些任务变得更难,因此它不像那些没有那么完整的实现. (3认同)
  • 为什么执行不力?根据规范,我会说依赖于回读文档字符串的能力的CL代码是糟糕的代码. (2认同)