2016-04-26 67 views
1

我目前在朱莉婭編程,我想要一個方法(ProbData類的構造函數)採取定義類型的數組作爲其參數。我目前在做的是:朱莉婭:使方法採取數組作爲參數

function ProbData(variables::AbstractArray{BaseVariable, 1}) 
    instance = new() 

    instance.numPara = size(variables, 1) 
    instance.numRand = 0 

    for x = variables 
     if x.variableType != "Det" 
      instance.numRand += 1 
     end 
    end 

    instance.getNumPara = function() 
     return instance.numPara 
    end 

    instance.getNumRand = function() 
     return instance.numRand 
    end 

    return instance 
end 

BaseVariable是一個抽象,有三個子類型。當我嘗試:

x = DetVariable("test", 0.15) 
P = ProbData([x]) 

我收到此錯誤信息:

ERROR: LoadError: MethodError: 'convert' has no method matching convert(::Type{ProbData}, ::Array{DetVariable.jl,1}) 

我怎樣才能解決這個問題?我剛剛學了幾天這種語言,所以如果你能指出我不應該做的事,我也會很感激。

編輯:我發現,如果我將構造函數的參數數組定義爲某個類型的數組而不是抽象數組,那麼代碼將正常工作。但是,我需要該參數爲一個數組,其元素可以是BaseVariable的任何子類型。

回答

3

只要改變函數聲明:

function ProbData{T<:BaseVariable}(variables::AbstractArray{T, 1})