gpt4 book ai didi

function - 如何作为 Clojure 中函数的结果返回取消引用的值

转载 作者:行者123 更新时间:2023-12-01 16:14:14 26 4
gpt4 key购买 nike

我有一个带有向量值的原子:

(def v (atom [1 2]))

我想编写一个函数来返回这个取消引用的原子。也就是说,我基本上想编写一个返回与此相同结果的函数:

=> @v
[1 2]

我的第一 react 是这样的:

=> (let [f #(@v)]
(println (f)))
ArityException Wrong number of args (0) passed to: PersistentVector clojure.lang.AFn.throwArity (AFn.java:429)

但这当然不起作用,因为取消引用的原子不是函数:

=> (@v)
ArityException Wrong number of args (0) passed to: PersistentVector clojure.lang.AFn.throwArity (AFn.java:429)

我最终得到的解决方法是:

=> (let [f #(vec @v)]
(println (f)))
[1 2]
nil

...但是肯定有更好的方法来做到这一点,而不必假设原子的值是向量?

最佳答案

现有的答案都没有给出两个最简单、最简洁的解决方案,所以它们就在这里。如stated作者:@Stefan,您想要与此功能等效的功能:

(fn [] (deref v))

但是,deref 的这种用法这正是 @ reader 宏旨在简化的用例:

(fn [] @v)

或者,由于 (deref v) 是函数调用,因此您可以使用 #() 读取器宏:

#(deref v)

这里的要点是,您不能同时使用 @#() 两者这个案例。但这并不意味着您不能或不应该使用其中的一个。

关于function - 如何作为 Clojure 中函数的结果返回取消引用的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687366/

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