gpt4 book ai didi

clojure - 引用设置 vs 通勤 vs 改变

转载 作者:行者123 更新时间:2023-12-02 07:07:41 26 4
gpt4 key购买 nike

在 Clojure 中设置 ref 值的 3 种方法有什么区别?我已经多次阅读有关 ref-set、commut 和 alter 的文档。我很困惑在什么时候使用哪些。有人可以向我简要描述一下这些差异是什么以及为什么需要每个差异吗?

最佳答案

作为软件事务内存系统如何在 clojure 中工作的 super 简单解释;它会重试交易,直到每个交易都通过,并且其值不会从其下方更改。您可以使用引用更改函数来帮助它做出决定,该函数会提示事务之间哪些交互是安全的。

  • ref-set 适用于您不关心当前值的情况。 只需将其设置为此! ref-set 可以让您免于编写类似 (alter my-ref (fun [_] 4)) 之类的内容,只是为了将 my-ref 的值设置为 4。 (ref-set my-ref 4) 确实看起来好多了:)。
    使用ref-set简单地设置值。

  • alter 是最正常的标准。使用此功能可以更改该值。这就是 STM 的核心内容。它使用您传递的函数来更改值,如果无法保证该值自事务开始以来未发生更改,则会重试。这是非常安全的,即使在某些情况下您不需要它那么安全,例如递增计数器。大多数时候您可能想使用alter

  • commute 是 alter 的优化版本,适用于事物顺序实际上并不重要的情况。谁向计数器添加了哪个+1 都没有区别。结果是一样的。如果 STM 决定您的事务是否可以安全提交,并且仅在通勤操作上有冲突,而在更改操作上没有冲突,那么它可以继续提交新值,而无需重新启动任何人。这可以节省偶尔的事务重试,尽管您不会在正常代码中看到巨大的 yield 。
    尽可能使用通勤

关于clojure - 引用设置 vs 通勤 vs 改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4999281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com