:コンストラクタマップと後続の定義では、どのようにしてvarargsコンストラクタを表現できますか?(スーパークラスには複数のコンストラクタがvarargsであると仮定します)clojure gen-class varargsコンストラクタ
7
A
答えて
1
varargsは基本的にオブジェクト配列のシンタックスシュガーであるため、 "[Ljava.lang.Object;"コンストラクタのパラメータの型として指定します。ここで
は、いくつかのサンプルコードです:(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))
とそれはそれはClojureのは、現時点ではそれをサポートしていないので
user=> @(t.vtest. (into-array Object ["A" "B" 1 2]))
first element of args A total elements 4
["A" "B" 1 2]
1
は、あなたがそれにパッチを適用する必要がREPLでどのように見えるかです:https://groups.google.com/forum/#!topic/clojure/HMpMavh0WxA.
新しいメタタグで使用してください:
(ns t.vtest
(:gen-class
:implements [clojure.lang.IDeref]
:init init
:state state
:constructors {^:varargs ["[Ljava.lang.Object;"] []}
))
関連する問題
- 1. Clojureでコンストラクタを提供
- 2. Scala:Seqまたはvarargsのいずれかを取るコンストラクタ
- 3. Java 8ストリームとvarargs
- 4. C varargs - va_copyの問題
- 5. JavaのVarargsに相当するOracle
- 6. varargsとしてリストを渡す
- 7. varargsを使用したSpark UDF
- 8. Javaでnullパラメータを持つVarargs
- 9. ClojureクラスからのClojure ISeq
- 10. のClojureの喜びでClojureの
- 11. Clojureの
- 12. Clojureオフラインインストール
- 13. Clojure closure
- 14. Clojure&ZeroMQ
- 15. Clojure OutOfMemoryError
- 16. Clojure#=リーダマクロ
- 17. Clojureの
- 18. Clojureの
- 19. Clojureの
- 20. Clojureの
- 21. Clojureの
- 22. Clojureの
- 23. Clojureの
- 24. Clojureのdefrecord - 使い方は?
- 25. Clojure素数レイジーシーケンス
- 26. Clojureのリファレンスベクトル
- 27. はClojureの
- 28. Clojureのループ
- 29. telnet in clojure
- 30. Clojureのリネーム・キー
問題の問題は解決しません。 varargメソッドを定義するのではなく、arrayを受け付けるメソッドを生成します。これは同じではありません。違いは、varargには生成されたバイトコード内の特別なACC_VARARGS opscodeによってフラグが立てられ、現在はサポートされていません。 – Lambder