欢迎!请参阅关于页面以了解工作原理的更多信息。
评论者:seancorfield
注意到我们在工作中有一个JIRA问题,要为几个{{defonce}}调用添加文档字符串(通过alter-meta!),我发现了这个问题,想知道是什么阻碍了其推进?
alter-meta!
Linus的补丁是否是一个整体可接受的解决方案(只是缺少测试)?或者是否想要不同的方法?这是否被CLJ-1446所阻塞,人们希望先修复它再更新{{defonce}}?
评论者:alexsiller
更改为缺陷以重置元数据。
评论者: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}}仍然破坏了元数据。例如:
`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,抱歉邮件箱噪音)