Printing Clojurescript映射函数的行为异常

Printing Clojurescript映射函数的行为异常,printing,clojure,clojurescript,map-function,Printing,Clojure,Clojurescript,Map Function,我有两段代码片段,我认为这两段代码都会导致警报。但是,第一个结果为无,而第二个执行警报 (map #(.alert js/window %) ["hey1" "hey2"]) 这一微小的修改将按预期打印(nil-nil),并修复警报问题。问题是为什么 (print (map #(.alert js/window %) ["hey1" "hey2"])) 另一个奇怪的观察结果是,第一个代码段可以从浏览器repl中工作,但在输入代码时不能工作 地图功能是否没有副作用,但打印功能是否没有副作用?也

我有两段代码片段,我认为这两段代码都会导致警报。但是,第一个结果为无,而第二个执行警报

(map #(.alert js/window %) ["hey1" "hey2"])
这一微小的修改将按预期打印(nil-nil),并修复警报问题。问题是为什么

(print (map #(.alert js/window %) ["hey1" "hey2"]))
另一个奇怪的观察结果是,第一个代码段可以从浏览器repl中工作,但在输入代码时不能工作

地图功能是否没有副作用,但打印功能是否没有副作用?也许是一些我不知道的核心代码优化

工作方法和答案都是值得赞赏的。如果你需要更多信息,请在评论中告诉我

[org.clojure/clojurescript“1.8.51”]

BOOT_CLOJURE_版本=1.7.0

BOOT_版本=2.5.5

java版本“1.8.0_101”


说明:Ubuntu14.04.4 LTS

您不想使用
map
进行警报等副作用操作。您看到的问题是
map
懒惰的结果,因此在您使用结果序列的元素之前,它实际上不会完成工作。如果你真的想做一些副作用的事情,
doseq
可能是一个更好的选择,特别是如果你不需要一系列的结果:

(doseq [msg ["hey1" "hey2"]]
  (.alert js/window msg))
或者您可以使用
doall
强制计算整个序列:

(doall (map #(.alert js/window %) ["hey1" "hey2"]))

您不希望将
map
用于警报等副作用操作。您看到的问题是
map
懒惰的结果,因此在您使用结果序列的元素之前,它实际上不会完成工作。如果你真的想做一些副作用的事情,
doseq
可能是一个更好的选择,特别是如果你不需要一系列的结果:

(doseq [msg ["hey1" "hey2"]]
  (.alert js/window msg))
或者您可以使用
doall
强制计算整个序列:

(doall (map #(.alert js/window %) ["hey1" "hey2"]))

是的,他们谈论的是同一个话题。然而,想知道这个问题的人可能不知道副作用是什么,也不知道是什么导致了他们的问题。因此,我认为我的问题更有可能被需要答案的人发现。总之,保留此问题的唯一原因是,它不包含问题中的“副作用”一词。如果你认为这不重要,那么删除它是合理的。可能重复的是,他们都在谈论同一主题。然而,想知道这个问题的人可能不知道副作用是什么,也不知道是什么导致了他们的问题。因此,我认为我的问题更有可能被需要答案的人发现。总之,保留此问题的唯一原因是,它不包含问题中的“副作用”一词。如果您认为这不重要,则删除它是合理的。