我目前正在Julia编程,我想要一个方法(类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的任何子类型。
答案 0 :(得分:3)
只需将函数声明更改为:
function ProbData{T<:BaseVariable}(variables::AbstractArray{T, 1})