Существуют ли ленивые переменные в Clojure?

У меня есть немного вычислений, которые несколько дороги (запуск базы данных), и я хочу создать базу данных только в том случае, если я действительно собираюсь ее использовать. Я ищу ссылочную переменную (или просто переменную, если это возможно), которая будет оценивать свое значение только в том случае, если она используется (или разыменовывается) Что-то концептуально похожее на следующее

(def v (lazy-var (fn [] (do (println "REALLY EXPENSIVE FUNCTION") true))))

и в будущем , когда я либо просто использую var v, либо вызываю @v, я затем заставляю его распечатать «ДЕЙСТВИТЕЛЬНО ДОРОГАЯ ФУНКЦИЯ», и оттуда v имеет значение true. Здесь важно то, что fn не оценивался до тех пор, пока переменная была (раз) со ссылкой. При необходимости функция оценивается один раз и только один раз для вычисления значения переменной. Возможно ли это в clojure?

13
задан Stephen Cagle 14 June 2012 в 03:38
поделиться