2016-04-26 8 views
1

私は現在Juliaでプログラミングしており、定義された型の配列をパラメータとして持つメソッド(クラスProbDataのコンストラクタ)が必要です。私が現在行っていることは次のとおりです。Julia:メソッドがパラメータとして配列を取るようにする

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は3つのサブタイプを持つ要約です。私がしようとすると、

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}) 
関連する問題