: constructors haritası ve sonraki -init tanımları, bir varargs yapıcısını nasıl temsil edebilirim (üst sınıfın bir varargs olduğu birden fazla kurucu varsayarak)?clojure gen sınıfı varargs constructor
7
A
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]
1
sen bunu yama gerek repl nasıl göründüğü: https://groups.google.com/forum/#!topic/clojure/HMpMavh0WxA.
Ve yeni meta etiketi ile kullanın:
(ns t.vtest
(:gen-class
:implements [clojure.lang.IDeref]
:init init
:state state
:constructors {^:varargs ["[Ljava.lang.Object;"] []}
))
İlgili konular
- 1. gen sınıfı kullanılarak clojure makro ek açıklamaları oluşturmuyor
- 2. Move Constructor çağrılıyor taban sınıfı Move Constructor
- 3. Clocure gen sınıfı yönteminde süper sınıf yöntemi nasıl çalıştırılır?
- 4. Clojure’ın Gen sınıfı ile nasıl statik yöntemler üretilir?
- 5. varargs
- 6. İkincil kurucuda varargs geçişi
- 7. varargs bulmaca?
- 8. ISerialization Constructor,
- 9. Clojure Özel İstisnalar?
- 10. Varargs dosyasında varargs işlevini başka bir işleve nasıl geçirebilirim?
- 11. C varargs - va_copy sayıları
- 12. Parametre varargs olduğunda Class.getMethod
- 13. Android "gen" klasörü ve SVN - bitter düşmanları
- 14. Ek Açıklama Kod Gen JavaPoet
- 15. TypeScript constructor sözdizimi
- 16. Form constructor vs Form_Load
- 17. Hançer2 hatası: @Inject constructor
- 18. MEF Constructor Enjeksiyon
- 19. Clojure
- 20. Clojure
- 21. Clojure
- 22. Clojure
- 23. Clojure
- 24. Clojure
- 25. Clojure
- 26. Clojure
- 27. Clojure
- 28. Clojure
- 29. Clojure
- 30. clojure
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