为什么julia不能识别作为函数参数传递的数组类型,将其列为Any?

时间:2017-11-09 12:26:43

标签: arrays julia

我在julia中定义了一个接受向量的函数(特别是Vector{Complex128})。当我查看@code_warntype的输出时,我发现变量类型列为Any。据我所知,这可能会产生速度影响。这是代码的简单版本,例如:

function abc(h::Vector{Complex128})
   a=1+2
end

@code_warntype的输出

julia> @code_warntype abc(zeros(Complex128,2))
Variables:
  #self#::#abc
  h::Any
  a::Int64

Body:
  begin 
    SSAValue(0) = (Base.add_int)(1, 2)::Int64
    return SSAValue(0)
  end::Int64

变量h的类型列为Any。我是朱莉娅的新手,不知道我在这里遗失了什么。此行为似乎并不特定于Vector{Complex128},我也会使用Vector{Float64}获得相同的行为。我在这里不正确地注释变量类型,或者这是它应该如何工作?我正在使用julia v0.6.0,如果这很重要的话。

1 个答案:

答案 0 :(得分:5)

这是因为编译器已对其进行了优化,因此它甚至不存在。它的打印方式在v0.6.1中已经改变得更清楚了:

julia> function abc(h::Vector{Complex128})
          a=1+2
       end
abc (generic function with 1 method)

julia> @code_warntype abc(zeros(Complex128,2))
Variables:
  #self# <optimized out>
  h <optimized out>
  a <optimized out>

Body:
  begin
      SSAValue(0) = (Base.add_int)(1, 2)::Int64
      return SSAValue(0)
  end::Int64