Clojurescript映射功能异常

杰森·巴萨尼斯(Jason Basanese)

我假设有两个代码片段都会导致警报。但是,第一个没有结果,而第二个执行警报。

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

此轻微修改将按预期打印(nil nil),并修复了警报问题。问题是为什么

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

另一个奇怪的发现是,第一个代码段是从浏览器副本中运行的,但是在键入代码时却无效。

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

变通方法和答案都受到赞赏。如果您需要更多信息,请在评论中告诉我。

[org.clojure / clojurescript“ 1.8.51”]

BOOT_CLOJURE_VERSION = 1.7.0

BOOT_VERSION = 2.5.5

Java版本“ 1.8.0_101”

说明:Ubuntu 14.04.4 LTS

约翰·萨克迈斯特(John Szakmeister)

您不想将其map用于警报之类的副作用操作。您看到的问题map是懒惰的结果,因此直到您消耗了所得序列的元素,它才真正起作用。如果您确实想做一些副作用,doseq可能是一个更好的选择,尤其是在不需要一系列结果的情况下:

(doseq [msg ["hey1" "hey2"]]
  (.alert js/window msg))

或者,您可以doall用来强制评估整个序列:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章