2

我是这样做的:

(coll? (map #(println (.toString %)) java-objects))

函数必须返回TRUE,这就是为什么这个coll?谓词。我想有更好,更优雅的方式吗?

附言。而且这个功能不起作用,因为它是“懒惰的”。您能否推荐一种正确的方法来遍历集合中的所有元素并对每个元素进行处理。

4

2 回答 2

2

http://clojuredocs.org/clojure_core/clojure.core/doall

(doall (map #(println (.toString %)) java-objects))

它会回报你

(nil nil nil ...)

如果你需要真的:

(do
    (doall (map #(println (.toString %)) java-objects))
    true)
于 2013-01-08T14:56:17.657 回答
1

如果您不需要表达式的值而只需要副作用,那么最好使用doseq而不是map

(do (doseq [o java-objects]
      (println (.toString o)))
    true)

doseq文档:

clojure.core/doseq
([seq-exprs & body])
Macro
  Repeatedly executes body (presumably for side-effects) with
  bindings and filtering as provided by "for".  Does not retain
  the head of the sequence. Returns nil.
于 2013-01-08T15:18:05.830 回答