我想在Clojure中获得有界基元的位大小。这些可以在
中找到(java.lang.Integer/SIZE)
=>32
或相等,不那么甜蜜
(. java.lang.Integer SIZE)
=> 32
(我使用java.lang。* - 名称只是为了清楚这些例子,它们可以省略)
当然我想参与调用,比如
(def integer-class java.lang.Integer)
(. integer-class SIZE)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: intger-class in this context, compiling:(/private/var/folders/yt/g82v06jn63qc5273rx4zjx440000gn/T/form-init4887476821027963248.clj:1:1)
Java中有限原语的数量是有限的,这使得这个练习有点学术性,但问题是:
如何(动态)调用以var?
形式给出的类中的静态方法答案 0 :(得分:1)
正如ponzao所说,Clojure vars and Java static methods有一个解决问题的宏jcall
的答案。
(defmacro jcall [obj & args]
(let [ref (if (and (symbol? obj)
(instance? Class (eval obj)))
(eval obj)
obj) ]
`(. ~ref ~@args)))
(jcall java.lang.Integer SIZE) => 32!
感谢。