欢迎!请参阅关于页面以了解有关此功能的更多信息。
评论者:seancorfield
注意到我们在工作中有一个JIRA问题要添加文档字符串到我们的一小部分{{defonce}}调用(通过alter-meta!),我发现这个问题并想知道什么阻止它前进?
alter-meta!
Linus的补丁是否是一个可接受的解决方案(但只是缺少测试)?或者是否想采用不同的方法?这是否阻碍了CLJ-1446并且人们想修复它后再更新{{defonce}}?
评论者:alexmiller
更改为缺陷,因为 metadata 被覆盖了。
评论者:stu
请添加测试。clojure.test-helper命名空间有有用的临时命名空间功能。
评论者:joegallo
此新补丁包括对 defonce 及测试的更改。
更改状态为已审核以便再次可筛选。
评论者:richhickey
我不同意关于 stomp 元数据的处理 - 提供了不同的元数据。defonce 的目的是避免重新评估 init。这是完成文档字符串的最简单更改吗?无论如何,分成两步。
将工单范围缩小到仅为 def 向 defonce 传递参数以添加对文档字符串的支持。添加了一个新的补丁来实现这一点。
评论者:stuart.sierra
已审查 clj-1148-defonce-2.patch,但状态回归为'未完成'。
此补丁中的 {{:arglists}} 元数据(符号列表)与 {{:arglists}} 的所有其他用法(向量列表)不一致。
除此之外,补丁很好。
更新了补丁以处理 arglist 格式的不一致,并附加了 clj-1148-defonce-3.patch。
clj-1148-defonce-3.patch 这个补丁没问题,但并没有真正解决文档字符串问题,因为 {{defonce}} 仍然破坏元数据。例如
`user=> (defonce foo "foo 的文档字符串" (do (prn 42) 42)) 42
`
user/foofoo函数的文档字符串niluser=> (defonce foo "foo 的文档字符串" (do (prn 42) 42))nil
user/foonil `
已审核,但注明保留意见。
Stuart是对的,第二个defonce应该保留文档字符串(因为它再次提供了它,应该是no-op)
从1.6版本中删除
评论者:claj
这个版本通过{{resolve}}查找之前定义的变量。如果变量已经定义且绑定,则重复的defonce不会影响命名空间。
请确认使用(resolve '~name)不会与{{ns}}-bindings或其他类似功能产生问题。
(resolve '~name)
此补丁还包含{{clj-1148-defonce-3.patch}}的测试以及{{:arglists}}属性。
(第四个补丁遗漏了一个def行,对不起造成了邮件箱噪音)。