gpt4 book ai didi

types - 为什么我的类型构造函数没有被识别

转载 作者:行者123 更新时间:2023-12-02 04:56:22 25 4
gpt4 key购买 nike

我是 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 是您的 native 整数类型的别名,在 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])

关于types - 为什么我的类型构造函数没有被识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21694033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com