常量变量和非常量全局变量之间的类型推断有何不同?

道格·理查森(Doug Richardson)

来自Julia的数组理解文档

以下示例计算当前元素及其沿1-d网格的左右邻居的加权平均值。

julia> const x = rand(8)
8-element Array{Float64,1}:
 0.843025
 0.869052
 0.365105
 0.699456
 0.977653
 0.994953
 0.41084
 0.809411

julia> [ 0.25*x[i-1] + 0.5*x[i] + 0.25*x[i+1] for i=2:length(x)-1 ]
6-element Array{Float64,1}:
 0.736559
 0.57468
 0.685417
 0.912429
 0.8446
 0.656511

笔记

在上面的示例中,x将其声明为常量,因为在非常量全局变量中,Julia中的类型推断无法正常工作。

从表达式中推断出结果数组类型;为了显式地控制类型,可以将类型置于理解之前。例如,在上面的示例中,我们可以避免将x声明为常量,并通过编写以下代码来确保结果为Float64类型:

Float64[ 0.25*x[i-1] + 0.5*x[i] + 0.25*x[i+1] for i=2:length(x)-1 ]

末尾的音符是什么意思?也就是说,常量和非常量全局变量之间的类型推断有何不同?

丹尼尔·阿恩特(Daniel Arndt)

我认为问题在于,如果x不将其声明为a const,那么Julia不知道该变量的类型是否会改变(因为它永远不会超出全局范围)。因此,朱莉娅需要假设x类型为Any

但是,如果x声明为const,Julia可以安全地假定其类型不会改变,并且Julia可以基于该信息进行优化。

请注意,如果您未声明x为const,则列表推导的返回类型将为Array{Any,1}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

常量变量和非常量全局变量之间的类型推断有何不同?

来自分类Dev

常量和全局变量之间的区别

来自分类Dev

指向非常量变量的常量指针

来自分类Dev

更改常量全局变量

来自分类Dev

java中的常量变量和最终变量之间有什么区别?

来自分类Dev

定义全局常量变量是否安全?

来自分类Dev

在类中使用非常量变量

来自分类Dev

使自定义结构类型的常量全局变量

来自分类Dev

静态,常量和全局变量的性能提升

来自分类Dev

在可变参数模板上混合常量和非常量变量

来自分类Dev

“类型”-声明vba中的常量变量

来自分类Dev

常量变量声明

来自分类Dev

React Native中的全局变量/常量

来自分类Dev

使用非常量变量代替所需的常量变量 (C++)

来自分类Dev

选择具有常量变量的查询

来自分类Dev

选择具有常量变量的查询

来自分类Dev

常量变量vs参考变量和只读变量

来自分类Dev

执行构造函数时未分配全局常量变量

来自分类Dev

C ++基于非常量变量声明数组?

来自分类Dev

将非常量变量注入到Symfony2中的所有模板中

来自分类Dev

覆盖静态常量变量

来自分类Dev

C++ 类型转换指向常量变量的指针

来自分类Dev

用全局变量初始化常量

来自分类Dev

从命令行读取常量作为全局变量

来自分类Dev

使用全局变量和常量是否是一种好习惯?(迅速5)

来自分类Dev

使用所有默认值初始化记录类型的常量变量

来自分类Dev

常量变量也是类变量吗?

来自分类Dev

浮点变量printf和常量之间有什么区别?

来自分类Dev

不同模块之间的全局变量