w: mapach konstruktorów i następnych -initowych definicjach, w jaki sposób mogę reprezentować konstruktor varargs (zakładając, że superklasa ma wiele konstruktorów, z których jeden jest varargs)?clojure gen-class varargs konstruktor
7
A
Odpowiedz
1
Ponieważ varargs są w istocie składnikami cukru dla tablic Object, można po prostu użyć "[Ljava.lang.Object;" jako typ parametru konstruktora.
Oto niektóre przykładowy 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))
i tak to wygląda w REPL
user=> @(t.vtest. (into-array Object ["A" "B" 1 2]))
first element of args A total elements 4
["A" "B" 1 2]
1
Od clojure nie wspierają go w tej chwili trzeba załatać go: https://groups.google.com/forum/#!topic/clojure/HMpMavh0WxA.
Używaj go z nowym metatagiem:
(ns t.vtest
(:gen-class
:implements [clojure.lang.IDeref]
:init init
:state state
:constructors {^:varargs ["[Ljava.lang.Object;"] []}
))
Powiązane problemy
- 1. Scala: Konstruktor biorąc Seq lub varargs
- 2. puzzle varargs?
- 3. Jak wywołać metodę varargs z dodatkowym argumentem z metody varargs
- 4. C varargs - va_copy issues
- 5. varargs i '...' argumentem
- 6. Przekazywanie listy jako varargs
- 7. Wydajność Java varargs
- 8. Oracle odpowiednik Java Varargs
- 9. Korzystanie varargs od Scala
- 10. Czy konstruktor generuje domyślny konstruktor?
- 11. wykonawczych metoda rodzajowa z varargs
- 12. Jak dodać argumenty do varargs?
- 13. Konstruktorzy w scala z varargs
- 14. Siła pojedynczy argument Scala varargs
- 15. Przekazywanie varargs w konstruktorze podrzędnym
- 16. varargs typu klasy w Javie
- 17. Zmiana zachowania mapy w Clojure
- 18. Konstruktor URL/Konstruktor zapytań w Go
- 19. Konstruktor nadrzędnymi
- 20. Konstruktor problem
- 21. współdziałanie varargs Kotlin Java nie działa prawidłowo
- 22. Jak używać Scala varargs z kodu Java
- 23. Jak przekazać ArrayList do parametru metody varargs?
- 24. Czy to korzystanie z varargs jest bezpieczne?
- 25. połączeń java varargs metodę z Kotlin
- 26. Varargs z parametrami pustymi w Javie
- 27. Sprawdzanie varargs typu przypisania makra Scala
- 28. Korzystanie z leniwych funkcji oceny w varargs
- 29. Scala - czy można cofnąć ponowne użycie varargs?
- 30. Combined wykorzystanie ciąg i varargs w string.Format()
Nie rozwiązuje problemu określonego w pytaniu. Zamiast definiowania metody vararg generuje ona metodę akceptującą tablicę. To nie to samo. Różnica polega na tym, że vararg jest oznaczony specjalnym opscodem ACC_VARARGS w wygenerowanym kodzie bajtowym, którego clojure obecnie nie obsługuje. – Lambder