Скажем, у меня есть перечисление Java. Например:
public enum Suits {CLUBS, DIAMONDS, HEARTS, SPADES};
Обычно я могу сделать что-то в clojure с таким перечислением, как это:
(defn do-something []
(let [s Suits/DIAMONDS] (...)))
Но я хочу написать функцию clojure, которая позволяет вызывающему указать, какой экземпляр перечисления использовать:
(defn do-something-parameterized [suit]
(let [s Suits/suit] (...)))
Идея состоит в том, чтобы позволить вызывающему абоненту проходить в "DIAMONDS"
и иметь экземпляр enum DIAMONDS
, связанный с s
в let
.
Я мог бы сопоставить cond
с параметром, но это кажется неуклюжим, чем необходимо. Я полагаю, что я мог бы также использовать макрос для построения Suits/
, добавленного в suit
. Это способ сделать это или есть не-макропоток, который мне не хватает?