我想创建一个函数向量。如果向量有多个元素,这很好用:
[mean, sum]
2-element Vector{Function}:
mean (generic function with 95 methods)
sum (generic function with 30 methods)
正如预期的那样,这里的类型是Vector
,元素类型是Function
。
但是如果向量只有一个元素,就会发生这种情况:
[mean]
1-element Vector{typeof(mean)}:
mean (generic function with 95 methods)
突然它是一个元素类型为typeof(mean)
的Vector
。这是一个错误还是我不够聪明,无法理解这一点?
最佳答案
Function
在 Julia 中是一个抽象类型:
julia> isabstracttype(Function)
true
对于给定函数 foo
调用 typeof(foo)
返回具体类型:
julia> dump(typeof(mean))
typeof(mean) <: Function
由于 typeof(foo)
返回一个具体类型,您可以拥有此类类型的并集向量:
julia> Union{typeof(mean), typeof(sum)}[mean, sum]
2-element Vector{Union{typeof(sum), typeof(mean)}}:
mean (generic function with 8 methods)
sum (generic function with 20 methods)
这也意味着您可以创建这样的空 Vector
:
v = Vector{Union{typeof(mean), typeof(sum)}}()
Union{typeof(sum), typeof(mean)}[]
现在您可以向其中添加元素:
julia> push!(v,mean)
1-element Vector{Union{typeof(sum), typeof(mean)}}:
mean (generic function with 8 methods)
julia> push!(v,sum)
2-element Vector{Union{typeof(sum), typeof(mean)}}:
mean (generic function with 8 methods)
sum (generic function with 20 methods)
当你只是做 [mean, sum]
时,Julia 试图找到一个同时捕获 typeof(mean)
和 typeof(sum)
的类型> 你最终得到了抽象的 Function
类型。
关于julia - 单元素函数列表有一个奇怪的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68945649/