[英]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.