2012-01-21 21 views

cevap

1

Varargs esas olarak Object dizileri için sözdizimi şekildeyse, yalnızca "[Ljava.lang.Object;" yapıcının parametresi olarak. İşte

bazı örnek kod:

(ns t.vtest 
    (:gen-class 
    :implements [clojure.lang.IDeref] 
    :init init 
    :state state 
    :constructors {["[Ljava.lang.Object;"] []})) 
    ;;          ^----------------------- 
    ;; You should put "[Ljava.lang.Object;" for superclass varargs constructor here 
    ;; I left it blank for the sake of working example 

(defn -init 
    [args] 
    (println "first element of args" (aget args 0) "total elements" (alength args)) 
    [[] (into [] args)]) 

(defn -deref 
    [this] 
    (.state this)) 

ve bu kadar Clojure anda bunu desteklemediğinden

user=> @(t.vtest. (into-array Object ["A" "B" 1 2])) 
first element of args A total elements 4 
["A" "B" 1 2] 
+0

Söz konusu sorun çözülmez. Bir vararg yöntemini tanımlamaktan ziyade, yöntem kabul etme dizisi üretir. Bu aynı değil. Fark, vararg'ın clojure'nin şu anda desteklemediği, oluşturulan bayt kodunda özel ACC_VARARGS opscode tarafından işaretlenmesidir. – Lambder