欢迎!请参阅 关于 页面以了解如何使用此功能的一些更多信息。
评论者: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,但恢复为“未完成”状态。
在这个补丁中,{{:arglists}}元数据(符号列表)与其他所有{{:arglists}}(向量列表)的使用不一致。
除此之外,这个补丁是好的。
更新补丁以解决arglist格式的不一致性,并附加clj-1148-defonce-3.patch。
补丁文件 clj-1148-defonce-3.patch 没问题,但它并没有真正解决 docstring 的问题,因为 {{defonce}} 仍然会破坏元数据。例如
`用户=> (defonce foo "foo 的 docstring" (do (prn 42) 42)) 42
`
用户/foofoo 的 docstringnil用户=> (defonce foo "foo 的 docstring" (do (prn 42) 42))nil
用户/foonil `
有保留意见地审查。
Stuart 对,第二个 defonce 应该保留 doc string (因为它再次提供了,应该是无操作的)
从 1.6 中拉取
由:claj 评论
这个版本通过 {{resolve}} 查找先前定义的变量。如果变量已经定义并绑定,则重复的 defonce 完全不会影响命名空间。
请确认使用 (resolve '~name) 不会影响 {{ns}}-bindings 或类似的。(无问题)
(resolve '~name)
这个补丁还包含 {{clj-1148-defonce-3.patch}} 中的测试以及 {{:arglists}} 属性。
(补丁 4 错过一个 def-row,对不起造成邮件箱的噪音)。