벡터를 통해 부작용으로 기능을 수행하려면 어떻게합니까?
-
02-01-2020 - |
문제
SAY-Hello-to-first-person은 괜찮습니다.
(defpartial greeting [name] [:p.alert "Hello " name ", how are you?"]) (defn say-hello [name] (append $content (greeting name))) (defn say-hello-to-first-person [names] (say-hello (first names))) (defn say-hello-to-everyone [names] (map say-hello names)) (say-hello-to-first-person ["Chris" "Tom" "Jim" "Rocky"]) (say-hello-to-everyone ["Chris" "Tom" "Jim" "Rocky"]).
해결책
doseq
, colluure의 "foreach":
(doseq [name names]
(say-hello name))
.
map
가 게으른 시퀀스를 생성하기 때문에 작동하지 않습니다. 시퀀스 (여기에 있지 않은)의 항목에 실제로 액세스 할 때까지는 평가되지 않으며 부작용이 발생하지 않습니다.
다른 옵션은 dorun
주위에 래핑하여 평가를 강제로 강제로 평가하는 것입니다.이 작품이 왜 당신의 이해를 도울 수 있는지 생각할 수 있습니다 (map
는 여기에 관용적 인 접근 방식이지만).
제휴하지 않습니다 StackOverflow