在:constructors映射和后续的-init定义中,我如何表示一个varargs构造函数(假设超类有多个构造函数,其中一个是varargs)?
发布于 2012-02-07 22:37:42
由于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))这就是它在REPL中的样子
user=> @(t.vtest. (into-array Object ["A" "B" 1 2]))
first element of args A total elements 4
["A" "B" 1 2]发布于 2013-09-11 17:48:47
由于clojure目前不支持它,您需要使用以下命令对其进行修补:https://groups.google.com/forum/#!topic/clojure/HMpMavh0WxA.
并将其与新的meta标签一起使用:
(ns t.vtest
(:gen-class
:implements [clojure.lang.IDeref]
:init init
:state state
:constructors {^:varargs ["[Ljava.lang.Object;"] []}
))https://stackoverflow.com/questions/8951449
复制相似问题