У меня есть такая карта:
(def a {:a 1, :b 2})
: Я хочу перегрузить карту, чтобы некоторые ключевые слова выполняли функции так:
(c: a)
Может выполнять функцию. Это возможно?
Обновление:
Я понимаю, что мог бы сделать что-то вроде:
(def a {:a (fn[] 1) :b (fn[] 2) :c (fn[] x)})
: и:
((c: a))
: но затем я должен преобразовать каждую существующую запись на карте в функцию.
Я хочу, чтобы функция каждый раз переоценивалась. Например, когда я делаю:
(def ab{:a 1 :b 2 :c ( #(.nextInt (java.util.Random.) 1000))})
(str (:c ab) " " (:c ab) " " (:c ab))
Я получаю:
61 61 61
Вместо трех разных чисел
Обновление 2
Я подумал об ответе, который мне дали, и понял, что он прав, я должен использовать только неизменные структуры. Окончательное решение, которое я придумал, заключалось в том, чтобы иметь функцию «обогащения», которая создает динамические свойства по требованию.
(def a {:a 1, :b 2})
: Я хочу перегрузить карту, чтобы некоторые ключевые слова выполняли функции так:
(str (:c (enrich ab)) " " (:c (enrich ab)) " " (:c (enrich ab)))
будет каждый раз выдавать разные числа, например:
58 639 710