Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure:如何列出当前名称空间中可访问的所有名称?_Clojure_Namespaces - Fatal编程技术网

clojure:如何列出当前名称空间中可访问的所有名称?

clojure:如何列出当前名称空间中可访问的所有名称?,clojure,namespaces,Clojure,Namespaces,dir仅列出“公共”变量。 实际上,它不会显示自己,并且在当前命名空间中可能不可用: user=> (dir user) nil user=> user=> user=> (in-ns 'foo) #<Namespace foo> foo=> foo=> foo=> (dir foo) CompilerException java.lang.RuntimeException: Unable to resolve symbol: dir

dir
仅列出“公共”变量。 实际上,它不会显示自己,并且在当前命名空间中可能不可用:

user=> (dir user)
nil
user=> 
user=> 
user=> (in-ns 'foo)
#<Namespace foo>
foo=> 
foo=> 
foo=> (dir foo)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: dir in this context, compiling:(NO_SOURCE_PATH:17)
user=>(dir-user)
无
用户=>
用户=>
user=>(在ns'foo中)
#
foo=>
foo=>
foo=>(dir foo)
CompilerException java.lang.RuntimeException:无法解析此上下文中的symbol:dir,正在编译:(无源路径:17)
存在哪些其他(非公共)类型的名称/变量?(这些可能是Java类型?)如何列出这些非公开名称?启动时如何将它们导入命名空间(或某些“默认情况”命名空间)?如何在运行时搜索默认名称空间


例如,在Python中:
dir()
列出当前名称空间中的所有内容,如果未找到引用的变量,则在
dir(\uuuu内置项)
中检查该变量。这个问题已经得到了回答。可以使用以下命令列出命名空间中的所有公共变量:

(keys (ns-publics 'foo))
还有一个类似python的函数,因此您可以执行以下操作:

 (clojure.repl/dir foo)
(defn ns-all-vars[n]
   (filter (fn[[_ v]]
             (and (instance? clojure.lang.Var v)
                  (= n (.getName (.ns v)))))
      (ns-map n)))
编辑

如果你真的想看到士兵们,你可以:

 (clojure.repl/dir foo)
(defn ns-all-vars[n]
   (filter (fn[[_ v]]
             (and (instance? clojure.lang.Var v)
                  (= n (.getName (.ns v)))))
      (ns-map n)))
然后打电话

(println (map first (ns-all-vars 'foo)))

打印“foo名称空间”中的所有符号。

此问题已得到回答。可以使用以下命令列出命名空间中的所有公共变量:

(keys (ns-publics 'foo))
还有一个类似python的函数,因此您可以执行以下操作:

 (clojure.repl/dir foo)
(defn ns-all-vars[n]
   (filter (fn[[_ v]]
             (and (instance? clojure.lang.Var v)
                  (= n (.getName (.ns v)))))
      (ns-map n)))
编辑

如果你真的想看到士兵们,你可以:

 (clojure.repl/dir foo)
(defn ns-all-vars[n]
   (filter (fn[[_ v]]
             (and (instance? clojure.lang.Var v)
                  (= n (.getName (.ns v)))))
      (ns-map n)))
然后打电话

(println (map first (ns-all-vars 'foo)))
打印“foo命名空间”中的所有符号。

可能重复的