gpt4 book ai didi

clojure - 从 swap 和 vswap 等函数返回一些东西

转载 作者:行者123 更新时间:2023-12-02 08:06:29 25 4
gpt4 key购买 nike

通常我有一个包含深度嵌套结构的 volatile 或 atom,如下所示:

{ :deeply { :nested { ... } } }

swap! 返回完整的更新结构。但有时我想返回其他信息(例如,一种包含有关我更改内容的信息的“差异”,尤其是在我更改多项内容的情况下)。

想到的一件事是为此定义另一个 volatile 变量,并将我想从 swap! 返回的信息存储在该 volatile 变量中供以后使用。

那肯定行得通,但我想知道我是否缺少一些更惯用和更实用的东西。

一种更实用的风格方式是将深层结构的布局更改为类似

{:state { :deeply { :nested { ... } } } :diff nil }

我将深层结构放入 :state 条目,将最新的 diff 放入 :diff 条目。

人们使用的惯用语有哪些是我遗漏的吗?

最佳答案

使用 swap-vals! 很容易做到这一点(仅适用于 Clojure 1.9+)和 clojure.data/diff :

(def a (atom {:deeply {:nested "value"}}))

(let [[old new] (swap-vals! a assoc-in [:deeply :other] "foo")]
(clojure.data/diff old new))
=> (nil
{:deeply {:other "foo"}}
{:deeply {:nested "value"}})

swap-vals! 类似于 swap! 但它返回旧值 新值。 diff 向您显示仅在左值中、仅在右值中以及在两个值中的内容。

关于clojure - 从 swap 和 vswap 等函数返回一些东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50979007/

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