julia - 单元素函数列表有一个奇怪的类型

标签 julia

我想创建一个函数向量。如果向量有多个元素,这很好用:

[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/

相关文章:

julia - “Julia”(编程语言)的名字指的是什么?

macos - 如何运行 julia-lang 文件 - Mac OS X

plot - Julia:不同颜色的散点图(使用 ColorGradient 或其他连续颜色编码)

julia - 在训练和测试向量数据集中保持相同的分箱

algorithm - 在两个向量中寻找最接近的值

recursion - 如何将递归函数的值返回到数组

julia - 如何识别不同的成员(member)?

julia - 如何在特定模式下打开 Julia repl

julia - 如何在命令行中将文件输入到 julia 脚本

julia - Julia 使用参数化类型创建空对象的方法是什么?