use*_*799 6 swing clojure map lazy-evaluation
我正在Clojure中构建一个简单的swing GUI.我试图通过在let的上下文中使用map将单个函数应用于多个GUI组件:
(map #(f % component4) [component1 component2 component3])
组件全部在let中定义.
有问题的是,map是懒惰的,并且动作不会应用于组件,但是,我可以通过将上面的内容包装在"take"中来强制它.
有地图的非懒惰替代方案吗?或者我应该以不同的方式解决这个问题?
编辑:在eclipse中使用逆时针方向.我使用REPL中的(使用'Lib:reload)并使用编辑器中的CTRL + Enter获得了不同的结果.重新加载会启动GUI,但会出现上述问题.从编辑器使用CTRL + Enter时没有出现问题,因此我认为我对问题的描述可能不准确.无论如何,在这种情况下,doseq似乎是更好的替代方案.
ama*_*loy 17
我挑战你的断言,take参与进来会产生任何不同.如果你将它包裹起来doall或者dorun它可以做你想要的,但你应该考虑使用doseq而不是map这种仅有副作用的动作.
最初发布为对问题的评论; 复制回答受欢迎的需求.
doseq可能是解决这个问题的最好方法.doseq大致相当于"for-each"语句,它在许多其他语言中循环遍历集合的每个元素.保证不会偷懒.
(doseq
[comp [component1 component2 component3]]
(f comp component4))
Run Code Online (Sandbox Code Playgroud)
一些一般建议:
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |