欢迎来到这里!请查看关于页面以了解更多关于此工作的信息。
评论者:seancorfield
注意到我们在工作中有一个添加文档字符串到我们有限的{{defonce}}调用(通过alter-meta!)的JIRA问题,我发现了这个问题,想知道是什么阻止了它的进展?
alter-meta!
Linus的补丁是否是总体可接受的解决方案(并且只是缺少测试)?还是需要不同的方法?这是否因为CLJ-1446而被阻止,人们希望在更新{{defonce}}之前修复这个问题?
评论者:alexmiller
改变为缺陷,因为 Metadata 被破坏。
评论者: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 可用,但它并没有真正解决文档字符串问题,因为 {{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}}-bindings 或类似没有问题。
(resolve '~name)
该补丁还包括 {{clj-1148-defonce-3.patch}} 中的测试以及 {{:arglists}} 属性。
(补丁 4 错过了一行定义行,抱歉造成邮件噪音).