Types 为什么不是';无法识别我的类型构造函数
我对Julia完全陌生(今天早些时候才开始),所以如果这是一个愚蠢的问题,请原谅我,但尽管我喜欢这门语言,但我并没有发现有很多很好的调试帮助 基本上,我只想为一个方法定义一个替代构造函数,该方法将在包含任何类型整数(int32、uint8等)的数组输入时激活 我认为这会相对简单,并写了以下内容:Types 为什么不是';无法识别我的类型构造函数,types,int,julia,int64,Types,Int,Julia,Int64,我对Julia完全陌生(今天早些时候才开始),所以如果这是一个愚蠢的问题,请原谅我,但尽管我喜欢这门语言,但我并没有发现有很多很好的调试帮助 基本上,我只想为一个方法定义一个替代构造函数,该方法将在包含任何类型整数(int32、uint8等)的数组输入时激活 我认为这会相对简单,并写了以下内容: type MyType weight_matrices::Array{Array{FloatingPoint}} MyType(layer_sizes::Array{Integer})
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}
可以解决人们假设的问题,但我不想将使用限制到那么远
你知道怎么做吗?任何代码审查也将不胜感激。我认为这段代码不是很“朱利安”(这是一件事吗?),我希望通过指针使它更容易被其他人使用。这是有效的:
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
权重矩阵::数组{Array{FloatingPoint}
结束
MyType{T检验=MyType([1,2,1])
MyType([
1x2数组{FloatingPoint,2}:
0.28085 0.10863,
2x1数组{FloatingPoint,2}:
0.245685
0.277009])
一句话,不变性:。如果其他人没有打败我,我可以明天写下来作为答案。
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])