【问题标题】:How do you know what has been loaded in a clojure REPL environment?你怎么知道在 clojure REPL 环境中加载了什么?
【发布时间】:2015-08-27 10:53:00
【问题描述】:

如果我有一个正在运行的 REPL,我可以打印出所有已定义的符号吗?有什么方法可以知道我正在使用的 REPL 中定义了什么?

【问题讨论】:

    标签: clojure read-eval-print-loop


    【解决方案1】:

    为了能够知道您的 REPL 的命名空间中定义了哪些符号,请使用以下代码:

        (keys (ns-publics 'my-name-space))  
    

    这个答案来自这个 Stackoverflow 帖子。 How to list the functions of a namespace?

    使用下面的代码打印到字符串。

        (pr-str (keys (ns-publics 'my-name-space)))
    

    下面是一个完整的例子,以 LightTable 的截图形式。

    【讨论】:

      【解决方案2】:

      还有dir 宏,用于列出命名空间:

      user=> (dir user)
      nil
      user=> (def x :a)
      #'user/x
      user=> (dir user)
      x
      nil
      user=> (dir clojure.core)
      *
      *'
      *1
      *2
      *3
      *agent*...
      

      【讨论】:

        【解决方案3】:

        首先,你需要找到所有的命名空间:

        (all-ns)
        

        然后,您必须决定要收集什么。例如,documentation on namespaces 列出了以下用于检查命名空间的函数:

        例如,你可以有这样的所有实习生映射:

        (reduce conj (map ns-interns (all-ns)))
        

        【讨论】:

        • 我想添加这个也是正确的......也很好的答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        • 2021-08-18
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        • 2015-11-14
        • 2013-03-17
        相关资源
        最近更新 更多