我有一个名为show的函数,它显示了一条带有消息的对话框.我需要将此函数映射到alist中的所有项目.但Clojure并没有向我显示任何消息.我究竟做错了什么?
(defn show[message]
(. javax.swing.JOptionPane (showMessageDialog nil message)))
(defn action[]
(map show '(HELLO Sweet love)))
Run Code Online (Sandbox Code Playgroud)
map函数实际上并不在集合的每个memeber上运行映射函数.而是它返回一个'lazy-cons'单元格.这看起来很像你的经典单链表,其中有一个非常重要的区别,每个单元格中的数据是在读取时计算的,而不是它定义的时间(这个结果当然存储起来供以后读取).因此,为了使函数实际运行,您必须读取运行函数的结果.因为在这种情况下你不关心函数的结果只是它运行clojure提供了一个很好的包装函数调用
(dorun .... insert your map here .... )
Run Code Online (Sandbox Code Playgroud)
这将创建地图,读取结果并立即抛出它们,浪费内存存储它们以供日后使用.
如果您将函数映射到想要保留的结果,那么请使用doseq.