2015-12-27 39 views
0

我收到警告,我不明白。局部變量T與靜態參數警告衝突

我第一次運行下面的代碼:

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對應於第二個片段的第三行。

任何人都可以在人類英語中解釋這個警告是什麼意思?

回答

1

這是說你試圖以兩種不同的方式使用T:一次是「靜態參數」,一次是局部變量。

首先,您使用T作爲參數與你parametrising功能initializeKDE

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

但你正試圖在第三行重新定義一個新的T

T = typeof(x) 

你想在這裏做什麼?如果您試圖將T定義爲矢量x包含的元素的類型,那麼您應該刪除此行並且所有內容都應該正常工作 - T將自動獲取您傳遞的矢量的元素類型(eltype)到initializeKDE函數。

+0

愚蠢的錯誤在我身邊,非常感謝! – aberdysh