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