我尝试在Clojure中执行以下操作
(map future exprs)
为了获取未来标记序列。不幸的是,这会出错,因为future
本身是一个宏,而不是一个函数。是否有一种方法可以使其在保持
map
语法的同时正常工作?我宁愿不使用for
宏(仅出于个人风格考虑)。我想我正在寻找一个
mmap
或宏映射。我尝试在Clojure中执行以下操作
(map future exprs)
为了获取未来标记序列。不幸的是,这会出错,因为future
本身是一个宏,而不是一个函数。map
语法的同时正常工作?我宁愿不使用for
宏(仅出于个人风格考虑)。mmap
或宏映射。user=> (map and [true false 0 nil])
java.lang.Exception: Can't take value of a macro: #'clojure.core/and (NO_SOURCE_FILE:1)
user=> (map #(and %) [true false 0 nil])
(true false 0 nil)
编辑
顺便提一下,如果您正在使用map
创建一堆在其他线程中执行的任务,可能会遇到问题。 map
是惰性的,直到有人要求它们才会创建futures。您需要强制它被评估(这就是repl在打印结果时发生的事情),或找到其他方法。
mapv
代替map
?...(defn defer [exprs] (mapv #(future %) exprs))
- Thumbnail(into [] (map #(...) xxx)
强制求值。我认为 dorun
也可以用于此目的。不过我现在没有时间查找。 - BillRobertson42