我有以下记录:
(defrecord Signal [samples ^double sample-rate ^double scaling-factor])如何将samples指定为双数组?
我正在使用clojure 1.2.0
编辑:
@dreish在levand更改后调用(show Signal)时得到以下输出:
[35] <init> (Object,double,double)
[36] <init> (Object,double,double,Object,Object)
[37] __extmap : Object
[38] __meta : Object
[39] sample_rate : double
[40] samples : Object
[41] scaling_factor : double我知道暗示非原始类型只是为了避免反射。来自http://clojure.org/datatypes
中的使用。
谢谢大家!
发布于 2010-09-15 18:09:45
如下所示:
(defrecord Signal [^doubles samples ^double sample-rate ^double scaling-factor])里奇·希基()不久前补充道:
为基元数组添加了特殊的类型提示-- #^ints、#^floats、#^long、#^doubles
有关如何工作的讨论,请参见http://clojure.org/news。
我没有一个Clojure环境来查看这是否仍然是最好的方法。我假设#^语法与Clojure中的所有其他类型提示一起在1.2中被更新为^
编辑:另一篇博客文章:http://asymmetrical-view.com/2009/07/02/clojure-primitive-arrays.html
发布于 2010-09-15 21:22:48
我同意levand关于使用哪种类型提示的回答,但您可能需要检查defrecord是否确实使用这些类型提示。在我的安装(也是1.2.0)中,它没有。
user=> (defrecord Signal [^doubles samples ^double sample-rate ^double scaling-factor])
user.Signal
user=> (use '[clojure.contrib.repl-utils :only [show]])
nil
user=> (show Signal)
=== public final user.Signal ===
[stuff deleted]
[38] <init> (Object,Object,Object)
[39] __extmap : Object
[40] __meta : Object
[41] sample_rate : Object
[42] samples : Object
[43] scaling_factor : Object
[more stuff deleted]如您所见,构造函数参数(38)和成员变量(41-43)仍然只是Object的。(数组无论如何都是引用,但是有一天,一旦实现了该功能,就可以将未装箱的数字存储在记录中了。)
https://stackoverflow.com/questions/3720196
复制相似问题