【问题标题】:Equivalent to clojure.contrib's show?相当于clojure.contrib的show?
【发布时间】:2013-07-30 19:26:03
【问题描述】:

clojure.contrib 中曾经有这个useful utility called show。现在,它已被弃用,是否有与之等效的版本?

谢谢!

【问题讨论】:

    标签: clojure clojure-contrib


    【解决方案1】:

    Stuart Halloway 在talk 中讨论了将show 解构为更“简单”,从而提供不同的可重用功能,他给出了clojure 的简单性。

    生成的代码使用clojure.reflect/reflectclojure.pprint/print-table 和标准的clojure filter:

    (require 'clojure.reflect)
    (require 'clojure.pprint)
    
    (->> (clojure.reflect/reflect java.lang.String)
         :members
         (filter #(.startsWith (str (:name %)) "last"))
         (clojure.pprint/print-table))
    

    【讨论】:

    • show 的一个很酷的地方是它既适用于实例,也适用于类型(参见 stackoverflow.com/questions/5821286)。您是否知道任何显示如何打印 Java 类实例的实例变量值的示例(例如在 Clojuredocs 或博客中)? clojure.repl 命名空间似乎不够用 (clojure.github.io/clojure/clojure.repl-api.html)
    • 上面的 clojure.reflect/reflect 构建在 Java 反射 API 之上,因此它应该可以满足您的需求。打破“表演”的部分原因是它做得太多了。反射功能在 clojure.reflect 命名空间(而不是 repl-api)中可用。尝试使用字符串实例而不是类型 - (clojure.reflect/reflect "instance of a string")
    【解决方案2】:

    我建议您参考 Where Did Clojure.Contrib Go 文档,其中提到了 clojure.contrib.repl-utils:

    迁移到 clojure.repl 和 clojure.java.javadoc。显示类似于 clojure.reflect/reflect 的功能。

    clojure.reflect API 文档是here,clojuredocs.org 示例是here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-06
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2010-09-12
      • 2017-07-11
      相关资源
      最近更新 更多