Ладно, я шел с loop , потом я прочитал твой пост и подумал, что могу быть на верном пути, но тьфу (этот язык TOUGH, но когда ты добьешься успеха, ты получишь это хорошоОле приятное чувство, как в «старые времена».)
Я пытался с let и loop даже, потому что я понял, что все, что я делал, было "псевдо-рекурсивно «вызываю мою функцию 13 раз вручную и говорю, что этого будет достаточно.Изучив так много, в конце концов я решил (с некоторой помощью переопределить переменную let'd в цикле Clojure ) использовать при из-за того, что "готово"предложение это было бы лучше.
Этот код завершает работу:
...{:__html
(let [new-text (atom (add-symbols (:text card)))]
(when (= @new-text (add-symbols @new-text))
@new-text
(swap! new-text #(add-symbols @new-text))))}...
используя цикл
...{:__html
(loop [new-text (:text card)]
(if (= new-text (add-symbols new-text))
new-text
(recur (add-symbols new-text))))}...
Они (оба) работают чисто и плохо.Причина, по которой я не хотел использовать «дополнительную информацию», заключается в том, что я прочитал одну строчку из «Clojure for the Brave»:
«Структура Clojure очень проста и последовательна по сравнению. НетНезависимо от того, с каким оператором вы работаете или с какими данными вы работаете, структура одна и та же. "
Что для меня означало:" Смотри, что бы ты ни делал, переворачивая блины "или смена шин, если у вас есть оператор и данные, на каком-то «ядре» манипуляции будут такими же, и мне нравится Clojure за это! Я знаю, что не придерживался чистых неизменных объектов, но я считаю, что atom должен в конечном итоге привыкнуть ...
о, и в основном "готово" проверял, запустил FN, текст изменился?
Спасибо !!
другой исходный код:
(defn make-span [text symbol path]
(.replace text (apply str symbol) (str "<img src='" path "'style=\"width:16px;height:16px;\"></img>")))
(defn add-symbols [card-text]
(-> (if (nil? card-text) "" card-text)
(make-span "[b]" "img/dc/me_bl.png")
(make-span "[c]" "img/dc/me_cs.png")
(make-span "[d]" "img/dc/me_dd.png")
(make-span "[f]" "img/dc/me_fd.png")
(make-span "[j]" "img/dc/me_ju.png")
(make-span "[s]" "img/dc/me_sl.png")
(make-span "[w]" "img/dc/me_wi.png")))
(defn- card-text
"Generate text html representation a card"
[card cursor]
[:div
[:h4 (:title card)]
[:div.text
[:p [:span.type (str (:type card))] (if (= (.toLowerCase (:type card)) (:Secondary card))
""
(str ": " (:Secondary card)))]
[:pre {:dangerouslySetInnerHTML #js {:__html
(let [new-text (atom (add-symbols (:text card)))]
(when (= @new-text (add-symbols @new-text))
@new-text
(swap! new-text #(add-symbols @new-text))))}}]]])
Есть еще код, но это не совсем то, какова была цель или применение этого вопроса. Я был действительно взволнован, чтобы добраться доТОЧНАЯ ТОЧКА вопроса или "МЯСОВОПРОС ", еще раз спасибо !!