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

道格·理查森(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 条评论
登录 后参与评论

相关文章