我正在用Clojure构建简单的Swing GUI。我试图通过在let上下文中使用map将单个函数应用于多个GUI组件:
`(map #(f % component4) [component1 component2 component3])`
其中所有组件都在let中定义。
问题是,map是延迟的,操作没有应用到组件上,但我可以通过在上述代码中包装一个“take”来强制执行它。
是否有非惰性的map替代方案?或者我应该用不同的方法处理?
编辑:在eclipse中使用counterclockwise。从REPL中使用(use 'Lib :reload)和从编辑器中使用CTRL + Enter获得了不同的结果。重新加载将启动GUI,但会出现上述描述的问题。当从编辑器中使用CTRL + Enter时,问题没有发生,因此我认为我对问题的描述可能不准确。无论如何,在这种情况下,doseq似乎是map的更好选择。
`(map #(f % component4) [component1 component2 component3])`
其中所有组件都在let中定义。
问题是,map是延迟的,操作没有应用到组件上,但我可以通过在上述代码中包装一个“take”来强制执行它。
是否有非惰性的map替代方案?或者我应该用不同的方法处理?
编辑:在eclipse中使用counterclockwise。从REPL中使用(use 'Lib :reload)和从编辑器中使用CTRL + Enter获得了不同的结果。重新加载将启动GUI,但会出现上述描述的问题。当从编辑器中使用CTRL + Enter时,问题没有发生,因此我认为我对问题的描述可能不准确。无论如何,在这种情况下,doseq似乎是map的更好选择。
(first (take 10000 (map #(do (Thread/sleep 10) %) (repeat 1))))
像预期的那样在0.01秒内返回。 - amalloy