欢迎!请参阅关于页面以获取更多关于该功能的工作原理的信息。
评论者:seancorfield
注意到我们在工作中有一个要将文档字符串添加到我们的一些 {{defonce}} 调用(通过 alter-meta!)的 JIRA 问题,我发现了这个问题,并想知道是什么阻止它向前推进?
alter-meta!
Linus 的补丁是否是一个接受的整体解决方案(只是缺少测试)?或者需要有不同的方法吗?这是否因为 CLJ-1446 而被阻塞,人们想先修复它再更新 {{defonce}}?
评论者:alexmiller
更改为缺陷,因为它会覆盖元数据。
评论者:stu
请添加测试。clojure.test-helper 命名空间提供了有用的临时命名空间支持。
评论由:joegallo发表
此新补丁包含对defonce的更改以及测试。
改为审核状态,以便此内容可再次经过筛选。
评论由:richhickey发表
我不同意关于stomp元数据 - 提供了不同的元数据。defonce的目的是避免init的重新评估。这是实现文档字符串的 simplest改变吗?无论如何,分成两部分。
将任务的范围减少到只是将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 行,对于邮箱的噪音表示歉意)。