13

我尝试在 Clojure 中执行以下操作

(map future exprs)

获取未来令牌的序列。不幸的是,这会出错,因为future它本身就是一个宏,而不是一个函数。

有没有办法在保持map语法的同时完成这项工作?我宁愿不使用for宏(仅作为个人风格问题)。

我想我正在寻找一张mmap或宏观地图。

4

1 回答 1

15

正如 Marcin 所述,使用 lambda(匿名函数)

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是懒惰的,除非有东西要求,否则不会创建期货。您需要强制对其进行评估(这是在 repl 打印结果时在 repl 中发生的事情)或找到其他方式。

于 2012-09-14T03:29:47.167 回答