42

Java lib を clojure にラップしていますが、可変長引数の処理に問題があります。言う、

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

clojureでこの関数を呼び出すにはどうすればよいですか?

4

3 に答える 3

57

Java varargsは実際には配列であるため、配列を渡すことでClojureでvararg関数を呼び出すことができます。

Clojure seqを(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)))
于 2012-07-28T15:28:16.360 に答える
9

Java可変長引数は、実際には入力として配列を必要とします。

したがって、Clojureでは、呼び出しは次のようになります。

(TestClass/aStaticFunction (into-array Integer some-sequence-of-integers))
于 2012-07-28T15:28:35.897 に答える
5
(TestClass/aStaticFunction (to-array '(1 2 3 4 5)))

例えば

(java.util.Arrays/asList (to-array '(1 2 3 4 5)))
于 2012-07-28T15:39:06.637 に答える