Julia:如何正确定义一个使用依赖于数字的类型的函数?

tst*_*tst 3 arrays julia

我使用数组,但我不需要在任何时候改变长度,但同时我在编写代码时不知道它们的长度.只有当我需要创建它们时才知道它的长度.

特别是我正在使用StaticArrays,我想定义一个类型的函数f(v::MVector{N,Float64}),它将接受MVector任何长度的输入.我该如何输入?

Dan*_*etz 7

对于一个运行的例子,假设我们有一个mv固定长度的向量,但我们只知道它在运行时的长度.它可以这样定义:

julia> using StaticArrays

julia> mv = @MVector rand(4)
4-element MVector{4,Float64}:
 0.978253
 0.691035
 0.988942
 0.770601
Run Code Online (Sandbox Code Playgroud)

要定义一个对这个向量进行操作的函数,我们可以写:

julia> mysum(v::MVector{N,Float64}) where {N} = sum(v)
Run Code Online (Sandbox Code Playgroud)

请注意where {N}使其符合所有固定大小的符号.

但这是不必要的.写作:

julia> mysum2(v) = sum(v)
Run Code Online (Sandbox Code Playgroud)

因为为每种类型的参数编译了新版本的函数,所以即使在运行时也可以优化特定长度.这是因为Julia根据参数类型专门设计了一个函数.MVectors包括其类型的长度,因此在运行时生成并使用该长度的专用函数.