来自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 ]
末尾的音符是什么意思?也就是说,常量和非常量全局变量之间的类型推断有何不同?
我认为问题在于,如果x
不将其声明为a const
,那么Julia不知道该变量的类型是否会改变(因为它永远不会超出全局范围)。因此,朱莉娅需要假设x
类型为Any
。
但是,如果x
声明为const
,Julia可以安全地假定其类型不会改变,并且Julia可以基于该信息进行优化。
请注意,如果您未声明x
为const,则列表推导的返回类型将为Array{Any,1}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句