欢迎!请查看 关于 页面上的更多信息,了解这个网站是如何工作的。
评论者:seancorfield
注意到我们在工作中有一个 JIRA 任务来添加少量 {{defonce}} 调用的文档字符串(通过 alter-meta!),我发现了这个任务,想知道是什么阻碍了它的进展?
alter-meta!
Linus 的补丁是否是一个可以接受的解决方案(仅仅缺少测试)?还是需要一个不同的方法?这是否由 CLJ-1446 阻碍,人们希望修复后再更新 {{defonce}}?
评论者:alexmiller
由于破坏元数据,改为缺陷。
评论者:stu
请添加测试。clojure.test-helper 命名空间提供了有用的临时命名空间支持。
评论者:joegallo
这个新补丁包括对defonce和测试的更改。
改为经审查,以便再次可筛选。
评论者:richhickey
我不同意stomp meta数据的看法——提供了不同的meta数据。defonce的目的在于避免init重新评估。这是实现文档字符串的简单改动吗?无论如何,分成两个部分。
缩减工单范围,仅将defonce参数传递给def,以添加docstring支持。添加了实现此功能的补丁。
评论者: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应该保留文档字符串(因为它再次提供了它,应该是一个无操作)
从1.6中删除
评论者:claj
这个版本使用 {{resolve}} 来查找先前定义的变量。如果变量已经定义并且是有界的话,重复的defonce对命名空间没有任何影响。
请确认使用 (resolve '~name) 对于 {{ns}} 绑定或其他类似的不会造成问题。
(resolve '~name)
这个补丁还包含了 {{clj-1148-defonce-3.patch}} 中的测试以及 {{:arglists}} 属性。
(补丁4遗漏了一个def行,很抱歉打扰了您的收件箱。)