[英]Difference between using a for loop to run a body in a macro versus mapping `exec' over the body
在以下代码中使用(map exec ~body)
与(for [node ~body] node)
有什么区别?
(defmacro with-cwd [dir #* body]
`(let [ cwd (.cwd Path) ]
(try (.chdir os ~dir)
;; Should I use this?
(map exec ~body)
;; Or this?
(for [node body] node)
;; UPDATE: Or this...
(do ~@body)
;; UPDATE: Or this?
~@body
(finally (.chdir os cwd)))))
哪个更安全,或者它们都好吗? exec()
似乎不再运行代码字符串了,我相信这在Python 3
中已经改变了,所以现在可以了吗? 我只是想使用更简洁的东西; 我不擅长命名变量。
更新:我也刚刚意识到(do ~@body)
也是一种选择,这似乎是大多数人所做的; 那和简单地做~@body
有什么区别?
使用
(map exec ~body)
与(for [node ~body] node)
有什么区别
map
收集结果,而for
忽略它们。 exec
运行一串 Python 代码或 Python 代码对象,因此无论body
的返回值是什么,它都可能不会做任何有用的事情。
exec()
似乎不再运行代码字符串
确实如此。 你必须阅读文档,我的男人。
(do ~@body)
也是一个选项,这似乎是大多数人所做的; 那和简单地做~@body
有什么区别?
在这个位置,什么都没有,因为try
已经按顺序计算了它的主体形式并返回最后一个,就像do
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.