У меня есть атом с векторной величиной:Как вернуть разыменованное значение в качестве результата функции в 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'. Я не знаю, почему люди обертывают его функцией как annwer, но в любом случае вы упомянули в комментариях, что это упрощенный вопрос. Я думаю, вы слишком упростились, поэтому, возможно, отредактируйте и дайте нам более подробную информацию? как ваш вопрос в настоящее время стоит, 'deref' * является * функцией. И если вы просто используете 'deref', вы вообще не загрязняете свое пространство имен, и вы также можете просто быстро' deref' использовать макрос читателя '@'. – MasterMastic
Это не просто функция 'deref'! Это не значит, что это аргумент, но 'v'. FWIW, вы также можете написать: '# (-> @v)' – ClojureMostly