Types 接受数矩阵的所有向量作为Julia中的函数参数

Types 接受数矩阵的所有向量作为Julia中的函数参数,types,type-conversion,julia,Types,Type Conversion,Julia,我正在尝试编写一个函数,它接受矩阵向量并递归计算它们的乘积。函数本身是这样的: using LinearAlgebra: I """ Recursively calculates the product of the matrices in a given vector `V`. """ function ∏_(V) if length(V) == 1 return V[1] elseif length

我正在尝试编写一个函数,它接受矩阵向量并递归计算它们的乘积。函数本身是这样的:

using LinearAlgebra: I

"""
Recursively calculates the product of the matrices in a given vector `V`.
"""
function ∏_(V)
    if length(V) == 1
        return V[1]
    elseif length(V) == 0
        UniformScaling(1)
    else
        V[1] * ∏_(V[2:end])
    end
end
这一切都很好,但我想将输入的类型限制为

V::Vector{Matrix{Number}} ,

其中,
Number
可以是任何字段元素(整数、有理数或复数)。我如何使用Julia的类型注释实现这一点?我知道子类型操作符
您需要指定
V::Vector{您需要指定
V::Vector{一般来说,在Julia中过度限制输入类型被认为是不好的形式。尽量使您的类型签名允许,如果您不需要这样做的话(在不同输入的不同实现之间选择),您应该考虑根本不使用类型。

在这种情况下,我可能只使用
V::AbstractVector
,让元素成为“支持乘法的任何类型”,甚至没有理由将其限制为
Number
s,imho

此外,在这种情况下,您可以只使用
prod
,它完全满足您的需要:

 ∏_(V) = prod(V)

顺便说一句:写
I
LinearAlgebra.I
可能比写
UniformScaling(1)更好
1
参数是一个
Int64
,如果它在较低整数的矩阵上运行,例如
Int32
,通常,在Julia中过度限制输入类型被认为是不好的形式。如果不需要执行分派,请尽量使类型签名具有许可性(在不同输入的不同实现之间选择),您应该考虑根本不使用类型。

在这种情况下,我可能只使用
V::AbstractVector
,让元素成为“支持乘法的任何类型”,甚至没有理由将其限制为
Number
s,imho

此外,在这种情况下,您可以只使用
prod
,它完全满足您的需要:

 ∏_(V) = prod(V)
顺便说一句:
I
LinearAlgebra.I
可能比
UniformScaling(1)
更好。
1
参数是一个
Int64
,如果它在较低整数的矩阵上操作,比如
Int32
另一个(等效)选项是使用
向量{Matrix{T}}其中T另一个(等价)选项是使用
向量{Matrix{T}}其中T
V::AbstractVector{<:AbstractMatrix{<:Number}}
V::AbstractVector{<:AbstractMatrix}
V::AbstractVector
V::Any
 ∏_(V) = prod(V)