Как мне вернуть карту clojure с фиксированными ключами и условными значениями?

] У меня есть функция, которая возвращает map. Ключи статичны, но значения являются условными. Примерно так:

(defn map-returning-function [x y]
  {:a (if (some-test-fn x)  "one value" "other value"
   :b (if (some-test-fn x)   15         25
   :c (if (different-test y) :one       :two})

Есть ли более элегантный способ добиться этого без необходимости писать тест if для каждого значения? Единственный другой способ Я можно придумать

(defn another-map-returning-function [x y]
  (if (some-test-fn x)
    {:a "one value",  :b 15, :c (if (different-test y) :one :two)}
    {:a "other value" :b 25, :c (if (different-test y) :one :two)}))

, который мне не кажется намного лучше, поскольку он повторяет имена ключей для каждой ветви условного выражения и повторяет вызов функции в different-test . И не дай бог, Мне нужен cond вместо просто if .

6
задан stand 8 June 2011 в 05:10
поделиться