【发布时间】:2016-02-13 02:45:51
【问题描述】:
来自朱莉娅docs on array comprehensions:
以下示例计算当前的加权平均值 沿一维网格的元素及其左右邻居。 :
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 ]
结尾附近的注释是什么意思?也就是说,常量和非常量全局变量的类型推断有何不同?
【问题讨论】:
-
如果你取出
const,你最终会得到一个Any的6元素数组,而不是Float64。请注意,如果您在函数内移动代码,即使没有const,您确实会得到Float64的数组。但是,我对类型推断行为的了解还不够,无法完全回答您的问题。 -
参考:issue#8870
标签: julia