分享您的想法,参加2024 Clojure状态调查!

欢迎!请查阅关于页面以获取更多关于如何使用本站的信息。

+3
文档
已关闭

assoc!conj!的文档字符串说“返回coll”,可能暗示瞬时编辑总是就地发生,其中的“coll”是第一个参数。但是,情况并非如此,应始终使用返回的集合。

方法:conj(image:assoc),《pop!的文档字符串中将“Return coll.”替换为“返回一个更新的集合。”。

补丁:CLJ-1385-reword-docstrings-on-transient-update-funct-2.patch

筛选:由Alex Miller筛选

备注:关闭:在Clojure 1.12.0-beta1(已更改'瞬时'文档字符串)中发布

15条回答

0

评论者:alexmiller

在修改瞬时集合时,需要使用如assoc!之类的函数返回的集合。其中的!表示其破坏性。瞬时页面(https://clojure.org/transients)明确描述了调用模式:“必须在下一个调用中捕获并使用返回值。”

我不认为我们应该引导程序员远离使用如assoc!之类的函数——瞬时用作性能优化,在循环中使用assoc!或conj!通常是速度最快的版本。然而,我认为让文档字符串更加明确是有帮助的。

0

评论由:gfredericks

Alex,我想你可能读错了工单——原帖主是建议引导使用 assoc! 的返回值,而不是完全避免使用 assoc!

文档字符串不只是一个不明确的,它在原帖主指出的情况下实际上是错误的。conj! assoc 并不在数组映射转换为哈希映射的点返回 {{coll}},而它们在其他方面属于实现细节,据我所知。

0

评论者:alexmiller

@Gary - 你是对的,我确实读错了。

{{assoc}} 和 {{ conj}} 都明文说明“返回一个新的集合”,而 assoc!conj! 说明“返回 coll。”我读作“返回修改后的集合”而不考虑是否是相同的实例,但我也可以按照您的方式读。

说“返回更新后的集合。”是否能够传达正确的意思?使用“集合”代替“coll”避免了具体变量之间的联系,“更新”更强烈地暗示你应该使用返回值。

0

评论由:pyrtsa

@Alex,这个更新让我觉得听起来很正确,据我所知。

0

评论由:gfredericks

是的,我认为这样更好。谢谢Alex。我很高兴为这一点提交补丁,但是我推测补丁对于这种更改太大了?

0

评论由:jafingerhut

对于这种更改,补丁正是过去所完成的事情,如果它在文档字符串中而不是在 clojure.org 网页上。

0

评论者:alexmiller

是的,需要补丁。

0

评论由:gfredericks

很高兴我提出了这个问题。

附上了补丁,该补丁还更新了《pop!》的文档字符串,它也存在相同的问题,尽管从我的了解来看,《pop!》总是返回相同的集合,但这可能不是合同的一部分。

0

评论由:jafingerhut

2014年4月6日的补丁CLJ-1385-reword-docstrings-on-transient-update-funct.patch,由于今天早些时候提交的一些更改,不再适用于最新的Clojure master,我怀疑如果这些更改是文档字符串更改,那么更新补丁以正常应用应该是简单的,但是主分支上也可能有提交的文档字符串更改。

0

评论由:gfredericks

附上了一个新的补丁。

0

评论者:richhickey

我认为这还可以更清晰,因为我们希望人们知道原始集合可能会受到影响并返回,且返回值必须用于后续调用。我认为从“transients”页面中的一段话应该包含在这些文档字符串中。

0

评论由:jafingerhut

我们能否说,在操作完成后,传入pop! conj(image: assoc)等操作中的集合具有未定义的内容,而只有返回值具有定义明确的内容?

这样的强烈言辞可能会引起人们的注意。

0

评论者:alexmiller

我正在处理这个问题。

0

评论者:alexmiller

未完成且我还保留这个问题

0
参考:[https://clojure.atlassian.net/browse/CLJ-1385](https://clojure.atlassian.net/browse/CLJ-1385) (由 alex+import 报告)
...