Types 为什么不是';无法识别我的类型构造函数

Types 为什么不是';无法识别我的类型构造函数,types,int,julia,int64,Types,Int,Julia,Int64,我对Julia完全陌生(今天早些时候才开始),所以如果这是一个愚蠢的问题,请原谅我,但尽管我喜欢这门语言,但我并没有发现有很多很好的调试帮助 基本上,我只想为一个方法定义一个替代构造函数,该方法将在包含任何类型整数(int32、uint8等)的数组输入时激活 我认为这会相对简单,并写了以下内容: type MyType weight_matrices::Array{Array{FloatingPoint}} MyType(layer_sizes::Array{Integer})

我对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}
可以解决人们假设的问题,但我不想将使用限制到那么远

你知道怎么做吗?任何代码审查也将不胜感激。我认为这段代码不是很“朱利安”(这是一件事吗?),我希望通过指针使它更容易被其他人使用。

这是有效的:

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])