首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何键入提示数组?

如何键入提示数组?
EN

Stack Overflow用户
提问于 2010-09-15 17:37:16
回答 2查看 4.8K关注 0票数 17

我有以下记录:

代码语言:javascript
复制
(defrecord Signal [samples ^double sample-rate ^double scaling-factor])

如何将samples指定为双数组?

我正在使用clojure 1.2.0

编辑:

@dreish在levand更改后调用(show Signal)时得到以下输出:

代码语言:javascript
复制
[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

  • 注意,当前,非原始类型的类型提示将不用于约束字段类型或构造函数arg,而将用于优化类方法

中的使用。

谢谢大家!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-15 18:09:45

如下所示:

代码语言:javascript
复制
(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

票数 19
EN

Stack Overflow用户

发布于 2010-09-15 21:22:48

我同意levand关于使用哪种类型提示的回答,但您可能需要检查defrecord是否确实使用这些类型提示。在我的安装(也是1.2.0)中,它没有。

代码语言:javascript
复制
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的。(数组无论如何都是引用,但是有一天,一旦实现了该功能,就可以将未装箱的数字存储在记录中了。)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3720196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档