Clojure вызывает серию функций и сохраняет их возвращаемые значения - PullRequest
2 голосов
/ 06 мая 2020
• 1000 Функции, вызываемые под каждым вызовом d/transact.
(defn recreate-database []
  "To recreate db after running delete-database in bin/repl"
  (pt1-transact-schema)
  (pt1-transact-data)
  (pt2-transact-schema)
  (pt2-transact-data)
  (pt3-transact-schema)
  (pt3-transact-data))

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

Интересно, какой хороший способ сделать это.

Подумал о чем-то вроде (map (comp println eval) [functions]), но это не так.

Ответы [ 3 ]

3 голосов
/ 06 мая 2020

есть также хорошая функциональная функция композиции под названием juxt:

user> ((juxt + - * /) 1 2)
;;=> [3 -1 2 1/2]

user> ((juxt (constantly 1) (constantly 2) (constantly 3)))
;;=> [1 2 3]

или, в вашем случае:

(def recreate-database (juxt pt1-transact-schema
                             pt1-transact-data
                             pt2-transact-schema
                             pt2-transact-data
                             pt3-transact-schema
                             pt3-transact-data))
1 голос
/ 06 мая 2020

Для datomi c все, что вам нужно, это соединение и список tx-данных. Затем вы можете использовать map, чтобы возвращать результат транзакции на каждом шаге (т.е. каждый tx-data):

(defn recreate-database [conn & tx-data]
  (->> tx-data
       (map (partial d/transact conn))
       doall))
1 голос
/ 06 мая 2020

Вы можете попробовать следующее:

(defn recreate-database []
  "To recreate db after running delete-database in bin/repl"

  (mapv #(%) [pt1-transact-schema
              pt1-transact-data
              pt2-transact-schema
              pt2-transact-data
              pt3-transact-schema
              pt3-transact-data]))

Выражение #(%) - это сокращенное обозначение лямбда-функции, которая принимает один аргумент, представляющий функцию, и вызывает эту функцию. Если вы сочтете его более читаемым, вы можете заменить это выражение на (fn [f] (f)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...