欢迎!有关如何操作的更多信息,请查看关于页面。
评论者:seancorfield
注意到我们在工作中有一个要为 {{defonce}} 调用添加文档字符串的 JIRA 请求(通过 alter-meta!),我在这个问题上遇到了这个问题,不知道它为什么无法推进?
alter-meta!
Linus 的补丁是否是一个可接受的解决方案(并且只是缺少测试)?或者是否需要一个不同的方法?这被 CLJ-1446 阻止了吗,人们希望在该更新 {{defonce}} 之前先解决它?
评论者:alexmiller
将问题改为缺陷,因为 metadata 被覆盖。
评论者:stu
请添加测试。clojure.test-helper 命名空间提供了有用的临时命名空间支持。
评论者:joegallo
本新补丁包括对defonce和测试的更改。
将其改为经过审查,以便再次可筛选。
评论者:richhickey
我不同意关于stomp元数据的说法 - 提供了不同的元数据。defonce的目的在于避免初始化的重新评估。这是否是完成文档字符串的最简单更改?无论如何,将其分成两部分。
将工单范围缩小到仅仅是传递defonce参数给def以支持文档字符串。添加了执行此操作的补丁。
评论者:stuart.sierra
审查了clj-1148-defonce-2.patch,但将其状态返回为“不完整”。
在此补丁中的{{:arglists}}元数据(符号列表)与其他所有{{:arglists}}(向量列表)的使用不一致。
除此之外,补丁很好。
更新了补丁以解决arglist格式的错误,并附上了clj-1148-defonce-3.patch。
该修补程序 clj-1148-defonce-3.patch 已通过,但它并没有真正解决文档字符串问题,因为 {{defonce}} 仍然会破坏元数据。例如
`用户=> (defonce foo "foo 的文档字符串" (do (打印 42) 42)) 42
`
用户/foofoo 的文档字符串nil用户=> (defonce foo "foo 的文档字符串" (do (打印 42) 42))nil
用户/foonil `
已筛选,但有保留意见。
Stuart 是对的,第二个 defonce 应该保留文档字符串(因为再次提供了它,应该不进行操作)
从 1.6 版本中拉出
评论者:claj
此版本通过 {{resolve}} 寻找之前定义的变量。如果变量已经定义并绑定,重复的 defonce 不会对命名空间产生任何影响。
请确认使用 (resolve '~name) 与 {{ns}}-bindings 或类似的问题没有问题。
(resolve '~name)
此修补程序还包括 {{clj-1148-defonce-3.patch}} 中的测试以及 <{{:arglists}} 属性。
(修补 4 遗漏了一行 def 行,抱歉造成邮箱噪音)。