欢迎!请参阅 关于 页面了解更多关于如何使用本站的信息。
评论由:seancorfield
注意到我们在工作中有一个 JIRA 问题是为了给几个 {{defonce}} 调用添加文档字符串(通过 alter-meta!}),我发现这个议题并想知道什么阻止了其进步?
alter-meta!
林纳斯的补丁方案在总体上是可接受的解决方案(只是缺少测试)吗?还是需要一个不同的方法?这是否被 CLJ-1446 堵塞了,人们希望在其更新 {{defonce}} 之前先修复它?
评论由:alexmiller
更改为缺陷,因为篡改了元数据。
评论由:stu
请添加测试。clojure.test-helper 名称空间提供了有用的临时名称空间支持。
评论者:joegallo
这个新补丁包括对defonce的更改以及测试。
改为Vetted,这样它就可以再次进行筛选。
评论者: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 是好的,但它并没有真正解决 docstring 的问题,因为 {{defonce}} 仍然会销毁元数据。例如
`user=> (defonce foo "foo 的 docstring" (do (prn 42) 42)) 42
`
user/foofoo 的 docstringniluser=> (defonce foo "foo 的 docstring" (do (prn 42) 42))nil
user/foonil `
screened with reservations noted.
Stuart 是对的,第二个 defonce 应该保留 docstring(因为它再次提供了它,应该没有操作)
从 1.6 中移除
评论者:claj
这个版本使用 {{resolve}} 来查找先前定义的变量。如果变量已经定义并且有边界,重复的 defonce 实际上不会影响命名空间。
请确认使用 (resolve '~name) 与 {{ns}}-bindings 或类似没有问题。
(resolve '~name)
这个补丁还包含了 {{clj-1148-defonce-3.patch}} 的测试以及 {{:arglists}} 属性。
(patch 4 错过了一个 def-row,抱歉邮件噪音)