在clojure中使用java结构

inv*_*kat 3 lisp java oop clojure

我有一个java.util.Collections $ UnmodifiableList 这样的东西:

(.getGuilds bot)
Run Code Online (Sandbox Code Playgroud)

我如何迭代它,getName在每个上面调用一个方法并创建所有名称的另一个列表.

lee*_*ski 6

如果我理解正确的话,你唯一需要做的就是简单地映射列表并获取名称.由于java.util.Collections$UnmodifiableList是可迭代的,clojure会将其视为可分集的集合.一个简单的例子:

user> (import java.util.Collections)
java.util.Collections

user> (def files (Collections/unmodifiableList
                  [(java.io.File. "aaa") (java.io.File. "bbb")]))
#'user/files

user> (map #(.getName %) files)
("aaa" "bbb")
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下,它应该是这样的:

(map #(.getName %) (.getGuilds bot))
Run Code Online (Sandbox Code Playgroud)