Подтвердить что ты не робот

Параметр разрушения функции Clojure, сохраняя исходное значение.

Можете ли вы разрушить параметр функции, но все еще имеете оригинал, доступный для использования? То, как я делаю это сейчас, просто использует форму let внутри тела функции, но мне интересно, есть ли способ сделать это.

4b9b3361

Ответ 1

Кажется, что :as тоже работает для функций:

с vector

(defn test [[x y :as v]]
  {:x x :y y :v v})

(test [1 2 3 4])
=>  {:x 1 :y 2 :v [1 2 3 4]}

с hash-map

(defn test2 [{x :x y :y :as m}]
    {:x x :y y :m m})

(test2 {:x 1 :y 2 :z 3})
=> {:x 1 :y 2 :m {:x 1 :y 2 :z 3}}

Посмотрите это потрясающее сообщение в блоге: http://blog.jayfields.com/2010/07/clojure-destructuring.html