欢迎!请参阅关于页面了解更多关于此功能的信息。
评论者:seancorfield
在注意到我们在工作中有一个添加docstring到少量{{defonce}}调用(通过alter-meta!)的JIRA问题时,我发现了这个问题,并想知道是什么阻止了它前进?
alter-meta!
林纳斯(Linus)的补丁是一个可接受的解决方案的整体吗(只是缺少测试)?或者需要一个不同的方法?这是否因为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 没问题,但并没有真正解决文档字符串问题,因为 {{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 忘记了一个 def-row,抱歉打扰了邮箱)