欢迎!请查阅关于页面以了解更多关于如何使用此功能的信息。
评论者: seancorfield
注意到我们有一个工作上的JIRA问题要为一些{{defonce}}调用添加文档字符串(通过alter-meta!),我来这个问题并想知道什么阻止了它前进?
alter-meta!
林斯的补丁是一个可行的解决方案总体上(并且只是缺少测试)吗?或者需要一个不同的方法?这是否被CLJ-1446阻塞了,在这种情况下可能希望在更新{{defonce}}之前修复它?
评论者: alexmiller
更改为缺陷,以便摧毁元数据。
评论者: stu
请添加测试。clojure.test-helper命名空间提供了有用的临时命名空间支持。
由joegallo发表的评论:
这个新补丁包括了对defonce的更改以及测试。
将状态改为“审阅”以便可以再次筛查。
由richhickey发表的评论:
关于stomp元数据,我不同意 - 提供了不同的元数据。defonce的目的是避免重新评估init。这是实现文档字符串的最简单更改吗?无论如何,分为两部分。
将票据范围缩小到仅仅将defonce参数传递给def,以添加对文档字符串的支持。添加了执行此操作的新补丁。
由stuart.sierra发表的评论:
已筛查clj-1148-defonce-2.patch,但状态回到“不完整”。
该补丁中的元数据(一个符号列表)与其他所有使用(一个向量列表)不一致。
除此之外,该补丁还很不错。
更新补丁以解决arglist格式的差异,并附上clj-1148-defonce-3.patch。
补丁文件clj-1148-defonce-3.patch是好的,但它并没有真正解决docstring问题,因为{{defonce}}仍然会破坏元数据。例如
`user> (defonce foo "foo的docstring" (do (prn 42) 42)) 42
`
user/foofoo的docstringniluser> (defonce foo "foo的docstring" (do (prn 42) 42))nil
user/foonil `
审阅时注明已有保留意见。
Stuart是对的,第二个defonce应该保留doc字符串(因为它再次提供了它,应该是无操作的)
从1.6中移除
评论者:claj
此版本使用{{resolve}}查找先前定义的变量。如果变量已经定义和绑定,重复的defonce不会对命名空间产生任何影响。
请确认使用(resolve '~name)与{{ns}}-bindings或类似的问题没有问题。
(resolve '~name)
此补丁还包含了{{clj-1148-defonce-3.patch}}中的测试以及{{:arglists}}属性。
(补丁4遗漏了一个def-row,对于打扰邮箱表示歉意)