我使用数组,但我不需要在任何时候更改长度,但同时我在编写代码时不知道它们的长度。只有当我需要创建它们时才知道它的长度。
特别是我使用的是StaticArrays,我想定义一个f(v::MVector{N,Float64})
类型的函数,它将接受任意长度的MVector
作为输入。我该如何输入?
答案 0 :(得分:7)
对于一个运行的例子,假设我们有一个固定长度的向量mv
,但我们只知道它在运行时的长度。它可以这样定义:
julia> using StaticArrays
julia> mv = @MVector rand(4)
4-element MVector{4,Float64}:
0.978253
0.691035
0.988942
0.770601
要定义一个对此向量进行操作的函数,我们可以写:
julia> mysum(v::MVector{N,Float64}) where {N} = sum(v)
请注意where {N}
符号,使其符合所有固定大小。
但这是不必要的。写作:
julia> mysum2(v) = sum(v)
可以优化特定长度,即使在运行时也是如此,因为为每种类型的参数编译了新版本的函数。这是因为Julia根据参数类型专门设计了一个函数。 MVectors包括其类型的长度,因此在运行时生成并使用此长度的专用函数。