我对Julia完全不熟悉(刚刚今天早些时候开始),请原谅我,如果这是一个愚蠢的问题,但是尽管我喜欢这种语言,但我找不到很多很好的调试帮助。
基本上我只想为一个方法定义一个替代构造函数,该方法将在包含任何类型的整数(int32,uint8等等)的数组的输入上激活。
我认为这会相对简单并写下以下内容:
type MyType
weight_matrices::Array{Array{FloatingPoint}}
MyType(layer_sizes::Array{Integer}) =
new([
rand(layer_sizes[i], layer_sizes[i+1]) for i in [1:length(layer_sizes)-1]
])
end
但是当我尝试使用它时:
test = MyType([1,2,1])
我收到错误:
ERROR: no method MyType(Array{Int64, 1})
将备用构造函数从Array{Integer}
切换到Array{Int64}
可以解决问题,但我不想限制使用量。
有关如何做到这一点的任何想法?任何代码审查也将非常感谢。我假设这段代码不是非常“朱利安”(这是一件事吗?)并且会喜欢指向其他人更有用的指针。
答案 0 :(得分:0)
这有效:
type MyType
weight_matrices::Array{Array{FloatingPoint}}
MyType(layer_sizes::Array{Int}) =
new([
rand(layer_sizes[i], layer_sizes[i+1]) for i in [1:length(layer_sizes)-1]
])
end
julia> test = MyType([1,2,1])
MyType([
1x2 Array{FloatingPoint,2}:
0.477698 0.454376,
2x1 Array{FloatingPoint,2}:
0.318465
0.280079])
Julia容器不是共同变体或反变量,因此[1,2,1]
,即具体类型Int
的数组,不是抽象类型Integer
数组的子类型
(注意,Int是您的本机整数类型的别名,64位机器上的Int64,32位机器上的Int32)
如果你真的希望你的输入是不同类型的整数,那么参数化输入的类型(使用外部构造函数)
type MyType
weight_matrices::Array{Array{FloatingPoint}}
end
MyType{T<:Integer}(layer_sizes::Array{T}) =
MyType([rand(layer_sizes[i], layer_sizes[i+1]) for i in [1:length(layer_sizes)-1]])
julia> test = MyType([1,2,1])
MyType([
1x2 Array{FloatingPoint,2}:
0.28085 0.10863,
2x1 Array{FloatingPoint,2}:
0.245685
0.277009])