我有一個矢量值的原子:如何返回取消引用的值作爲函數的結果Clojure中
(def v (atom [1 2]))
我想寫,將返回該提領原子的功能。也就是說,我基本上想寫將返回相同的結果,因爲這一個功能:
=> @v
[1 2]
我的這首取是這樣的:
=> (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
...但肯定有一個更好的方法來做到這一點,不必假設原子的值是矢量?
'(defn deref-v [](deref v))' –
這只是'deref'函數。我不知道爲什麼人們把它作爲一個函數來包裝它,但無論如何,你在評論中提到它是一個簡化的問題。我想你簡化得太多了,所以編輯並給我們更多的細節?作爲你的問題目前的立場,'deref' *是*的功能。如果你只是使用'deref',你根本不會污染你的命名空間,你也可以使用'@'reader宏快速'deref'。 – MasterMastic
這不僅僅是'deref'功能!它不會拒絕它的參數,而是'v'。 FWIW,你也可以寫:'#( - > @v)' – ClojureMostly