如何将Clojure命名空间转换为字符串?

3

我正在尝试漂亮地打印命名空间列表:

(doseq [x (all-ns)] (println x))

这会将每个命名空间打印成#<Namespace xxxxx>。我想要得到每个命名空间的xxxxx(即没有#<Namespace>)。我尝试过使用(name x)(symbol x),但是我得到了ClassCastException clojure.lang.Namespace cannnot be cast to java.lang.Named等错误。

(doseq [x (all-ns)] (println (name x)))
(doseq [x (all-ns)] (println (str x)))
(doseq [x (all-ns)] (println (namespace x)))

如何将命名空间作为字符串获取?


我意识到实际上(doseq [x (all-ns)] (println (str x)))是可以工作的,当我尝试时我确实有一个打字错误。但是如答案中所指出的ns-name是要使用的函数,比str更好。 - RubenLaguna
2个回答

7
使用 ns-name:
(doseq [x (all-ns)] (println (ns-name x)))

请注意,ns-name 返回的是一个符号。如果你需要一个字符串,请使用 (str (ns-name ns))

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接