【问题标题】:How to handle java variable length arguments in clojure?如何在clojure中处理java可变长度参数?
【发布时间】:2012-07-26 23:32:26
【问题描述】:

我正在将一个 java 库包装到 clojure 中,但是我在处理可变长度参数时遇到了问题。说,

TestClass.aStaticFunction(Integer... intList){/*....*/}

如何在 clojure 中调用这个函数?

【问题讨论】:

标签: clojure variadic-functions clojure-java-interop


【解决方案1】:

由于 Java 可变参数是 actually arrays,因此您可以通过传递数组来调用 Clojure 中的可变参数函数。

您可以将 Clojure 序列(可能通过使用 Clojure 的各种可变参数函数)转换为数组:

 (TestClass/aStaticFunction (into-array Integer [(int 1),(int 2)]))

(defn a-static-function-wrapper [& args]
  (TestClass/aStaticFunction (into-array Integer args))

或者创建一个数组并手动设置它的索引

(TestClass/aStaticFunction (doto (make-array Integer 3)
                              (aset 0 first-element)
                              (aset 1 second-element)
                              (aset 2 third-element)))

【讨论】:

    【解决方案2】:

    Java 可变长度参数实际上需要一个数组作为输入。

    所以在 Clojure 中调用应该是这样的:

    (TestClass/aStaticFunction (into-array Integer some-sequence-of-integers))
    

    【讨论】:

      【解决方案3】:
      (TestClass/aStaticFunction (to-array '(1 2 3 4 5)))
      

      例如

      (java.util.Arrays/asList (to-array '(1 2 3 4 5)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 2017-02-06
        • 2019-11-19
        • 2017-06-08
        • 2021-10-21
        • 2011-06-02
        相关资源
        最近更新 更多