如何解决具有泛型函数成员的结构数组?
我正在尝试构造一个结构数组,其中每个实例包含一个不同的函数。我想将它们循环添加到数组中。
这是一个例子:
struct mystruc{F}
σ::F
end
a = [mystruc(relu)]
for i in 1:3
append!(a,[mystruc(identity),])
end
作为旁注,我可以选择预分配我无法弄清楚如何使用这种类型的结构的数组。
解决方法
每个函数都有一个类型,该类型是那个函数专有的:
julia> typeof(x -> x) == typeof(x -> x)
false
这里我们两次创建了函数x -> x
,它们是两个不同的函数,因此它们的类型不同。
在a
的构造中,您将创建一个特定类型的数组:
julia> a = [mystruc(relu)]
1-element Array{mystruc{typeof(relu)},1}:
mystruc{typeof(relu)}(relu)
julia> typeof(a)
Array{mystruc{typeof(relu)},1}
因此,当您按下另一个函数时,会出现错误,因为此数组只能包含类型为mystruc{typeof(relu)}
的对象。
julia> push!(a,mystruc(x -> 2x))
ERROR: MethodError: Cannot `convert` an object of type
mystruc{var"#3#4"} to an object of type
mystruc{typeof(relu)}
Closest candidates are:
convert(::Type{T},::T) where T at essentials.jl:171
mystruc{typeof(relu)}(::Any) where F at REPL[2]:2
解决方案
构造a
时,请告诉Julia使用 any 函数的数组将包含mystruc
:
julia> a = mystruc{<:Function}[mystruc(relu)]
现在可以使用了!
julia> push!(a,mystruc(x -> 2x))
2-element Array{mystruc{#s1} where #s1<:Function,1}:
mystruc{typeof(relu)}(relu)
mystruc{var"#5#6"}(var"#5#6"())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。