局部变量T与静态参数warining冲突

时间:2015-12-27 04:59:33

标签: class object types static julia

我收到警告,我不明白。

我首先运行以下代码:

type PDF{T <: Real}
    ::Vector{Float64} # K
    μs::Matrix{T} # D x K
    Σs::Vector{Matrix{T}} # K{D x D}
end


type Q{T <: Real}
    w::Union{Float64, Vector{Float64}}
    μpair::Union{Vector{T}, Matrix{T}}
    Σpair::Union{Matrix{T}, Tuple{Matrix{T}, Matrix{T}} } # K{D x D}
end

type Smod{T <: Real}
    H::Matrix{T} # D x D
    Σs::Vector{Matrix{T}} # K{D x D}
    qs::Vector{Q{T}}
end


type Scale{T <: Real}
    μ::Vector{T} # D
    Σ::Matrix{T} # D x D
end

type Parameters{T <: Real}
    scale::Scale{T}
    w::Vector{Float64}
    maxNumCompsBeforeCompression::Integer
    numComponentsAbsorbed::Integer
end

type KDE{T}
    pdf::PDF{T}
    smod::Smod{T}
    params::Parameters{T}
end

在此之后,我在IJulia中运行以下代码段

function initializeKDE{T <: Real}(x::Vector{T})

    d = size(x,1)
    T = typeof(x)

     = ones(Float64, 1)
    μs = Array(T, d,1)
    μs[:,1] = x
    Σs = Array(Matrix{T}, 0)
    pdf = PDF(, μs, Σs)

    H = zeros(T, d,d)
    qs = Array(Q{T}, 0)
    smod = Smod(H, Σs, qs)

    scale = Scale(x, H)

    w = [0.0, 1.0]

    maxNumCompsBeforeCompression = min(10, (0.5d^2 + d))
    numComponentsAbsorbed = 0
    params = Params(scale, w, maxNumCompsBeforeCompression, numComponentsAbsorbed)

    kde = KDE(pdf, smod, params)

    return kde::KDE
end

我收到以下警告:

WARNING: local variable T conflicts with a static parameter in initializeKDE at In[4]:3.

其中In[4]:3对应第二个片段的第3行。

有人能用人类英语解释这个警告说的是什么吗?

1 个答案:

答案 0 :(得分:1)

这就是说你试图以两种不同的方式使用T:一次作为“静态参数”,一次作为局部变量。

首先,您使用T作为参数化参数的参数initializeKDE

function initializeKDE{T <: Real}(x::Vector{T})

但是你试图在第三行重新定义一个新的T

    T = typeof(x)

你想在这做什么?如果您尝试将T定义为向量x包含的元素的类型,那么您应该删除此行并且所有内容都应该正常工作 - T将自动执行传递给eltype函数的向量的元素类型(initializeKDE)。