Using lein repl
使用 Clojure 1.4.0,我可以定义一个^:const
Java 字节数组的,但我不能用它做任何事情:
user=> (def x (byte-array (map byte [0 1 2 3])))
#'user/x
user=> (alength x)
4
user=> (type x)
[B
user=> (def ^:const cx (byte-array (map byte [0 1 2 3])))
#'user/cx
user=> (alength cx)
CompilerException java.lang.RuntimeException: Can't embed object in code, maybe print-dup not defined: [B@10e6cbd, compiling:(NO_SOURCE_PATH:1)
user=> (type cx)
CompilerException java.lang.RuntimeException: Can't embed object in code, maybe print-dup not defined: [B@10e6cbd, compiling:(NO_SOURCE_PATH:1)
我已经确认这种情况也发生在我的应用程序中,所以这不仅仅是 REPL 问题。
我缺少什么?
^:const 形式在编译时评估,但在 clojure 中,编译时值必须可打印且可读(由 clojure 阅读器)*。与大多数 Java 对象一样,字节数组不可打印或可读,因此您无法将它们制成常量。
另外,根据文档,^:const 仅对基元有用。不是原始数组。
- 也可以看看http://www.infoq.com/presentations/Clojure-Macros http://www.infoq.com/presentations/Clojure-Macros对于一些相关问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)