【问题标题】:Python "dir" equivalent in ClojureClojure 中的 Python“dir”等价物
【发布时间】:2011-01-09 04:01:30
【问题描述】:

有谁知道 Python 的“dir”是否有 Clojure 等价物。基本上我需要知道我可以调用的函数,或者更具体地为 java 对象调用我想知道可用的方法和属性(我不确定在 java 中它们是否被称为方法和属性,这是 C# 术语)。

【问题讨论】:

    标签: python clojure dir


    【解决方案1】:

    clojure.contrib.repl-utils/show 在 REPL 中使用:

    user=> (use '[clojure.contrib.repl-utils :only (show)])
    nil
    user=> (show String)
    ===  public final java.lang.String  ===
    [ 0] static CASE_INSENSITIVE_ORDER : Comparator
    [ 1] static copyValueOf : String (char[])
    [ 2] static copyValueOf : String (char[],int,int)
    [ 3] static format : String (Locale,String,Object[])
    [ 4] static format : String (String,Object[])
    ...
    

    或者,也许是这样的:

    user=> (map #(.getName %) (.getMethods String))
    ("equals" "toString" "hashCode" "compareTo" ...)
    

    .getFields.getConstructors 相应地。

    【讨论】:

      【解决方案2】:

      clojure.repl 命名空间(自 Clojure 1.2 起可用)包含宏 dir 和函数 dir-fn

      user=> (clojure.repl/dir clojure.main)   
      load-script
      main
      repl
      ...
      
      user=> (clojure.repl/dir-fn 'clojure.main)
      (load-script main repl repl-caught repl-exception 
       repl-prompt repl-read skip-if-eol skip-whitespace 
       with-bindings)
      

      【讨论】:

      • 哦,我错过了clojure.repl 的介绍(Clojure atm 的时间不多)——很高兴知道。但是,按照 OP 的要求,您如何将它与 Java 的东西一起使用? (clojure.repl/dir String) 不适合我。
      • 没错,它只适用于 Clojure 命名空间。
      • 我想知道为什么他们没有在 clojure.repl 中包含类似 show 的内容。无论如何,+1 为您提及它。
      • 非常方便,但不是我想要的,这些在命名空间上工作。谢谢你提到他们。
      【解决方案3】:

      由于clojure.contrib 已被弃用且show 不再存在,我使用这个:

      (use 'clojure.reflect)
      (use 'clojure.pprint)
      
      (defn py-dir [obj]
        (let [types {clojure.reflect.Field "field" clojure.reflect.Constructor "constructor" clojure.reflect.Method "method"}]
          (->> (clojure.reflect/reflect obj)
               :members ;; list of maps
               (map (fn [m] {:name (:name m) :parameter (:parameter-types m) :type (get types (type m))}))
               (sort-by (juxt :type :name))
               (clojure.pprint/print-table))))
      

      试试:

      (py-dir Integer)
      

      返回:

      |                  :name |                           :parameter |       :type |
      |------------------------+--------------------------------------+-------------|
      |      java.lang.Integer |                   [java.lang.String] | constructor |
      |      java.lang.Integer |                                [int] | constructor |
      |                  BYTES |                                      |       field |
      |              DigitOnes |                                      |       field |
      |              DigitTens |                                      |       field |
      |              MAX_VALUE |                                      |       field |
      |              MIN_VALUE |                                      |       field |
      |                   SIZE |                                      |       field |
      |                   TYPE |                                      |       field |
      |                 digits |                                      |       field |
      |       serialVersionUID |                                      |       field |
      |              sizeTable |                                      |       field |
      |                  value |                                      |       field |
      |               bitCount |                                [int] |      method |
      |              byteValue |                                   [] |      method |
      |                compare |                            [int int] |      method |
      |              compareTo |                  [java.lang.Integer] |      method |
      |              compareTo |                   [java.lang.Object] |      method |
      |        compareUnsigned |                            [int int] |      method |
      |                 decode |                   [java.lang.String] |      method |
      |         divideUnsigned |                            [int int] |      method |
      |            doubleValue |                                   [] |      method |
      |                 equals |                   [java.lang.Object] |      method |
      |             floatValue |                                   [] |      method |
      |      formatUnsignedInt |             [int int byte<> int int] |      method |
      |      formatUnsignedInt |             [int int char<> int int] |      method |
      | formatUnsignedIntUTF16 |             [int int byte<> int int] |      method |
      |               getChars |                     [int int byte<>] |      method |
      |             getInteger | [java.lang.String java.lang.Integer] |      method |
      |             getInteger |               [java.lang.String int] |      method |
      |             getInteger |                   [java.lang.String] |      method |
      |               hashCode |                                [int] |      method |
      |               hashCode |                                   [] |      method |
      |          highestOneBit |                                [int] |      method |
      |               intValue |                                   [] |      method |
      |              longValue |                                   [] |      method |
      |           lowestOneBit |                                [int] |      method |
      |                    max |                            [int int] |      method |
      |                    min |                            [int int] |      method |
      |   numberOfLeadingZeros |                                [int] |      method |
      |  numberOfTrailingZeros |                                [int] |      method |
      |               parseInt | [java.lang.CharSequence int int int] |      method |
      |               parseInt |               [java.lang.String int] |      method |
      |               parseInt |                   [java.lang.String] |      method |
      |       parseUnsignedInt | [java.lang.CharSequence int int int] |      method |
      |       parseUnsignedInt |               [java.lang.String int] |      method |
      |       parseUnsignedInt |                   [java.lang.String] |      method |
      |      remainderUnsigned |                            [int int] |      method |
      |                reverse |                                [int] |      method |
      |           reverseBytes |                                [int] |      method |
      |             rotateLeft |                            [int int] |      method |
      |            rotateRight |                            [int int] |      method |
      |             shortValue |                                   [] |      method |
      |                 signum |                                [int] |      method |
      |             stringSize |                                [int] |      method |
      |                    sum |                            [int int] |      method |
      |         toBinaryString |                                [int] |      method |
      |            toHexString |                                [int] |      method |
      |          toOctalString |                                [int] |      method |
      |               toString |                                [int] |      method |
      |               toString |                            [int int] |      method |
      |               toString |                                   [] |      method |
      |          toStringUTF16 |                            [int int] |      method |
      |         toUnsignedLong |                                [int] |      method |
      |       toUnsignedString |                                [int] |      method |
      |       toUnsignedString |                            [int int] |      method |
      |      toUnsignedString0 |                            [int int] |      method |
      |                valueOf |               [java.lang.String int] |      method |
      |                valueOf |                                [int] |      method |
      |                valueOf |                   [java.lang.String] |      method |
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        相关资源
        最近更新 更多